首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试模拟对象rhino模拟

测试模拟对象rhino模拟
EN

Stack Overflow用户
提问于 2012-01-23 00:59:00
回答 2查看 1.4K关注 0票数 2

我是RhinoMocks的新手,我正在尝试编写一个测试,正如我所展示的,我有这样的类

代码语言:javascript
复制
public class A
{
    public void methodA(){}
}
public class B
{
    public void methodB(A a)
    {
      a.methodA();
    }
}

我试着像这样测试它

代码语言:javascript
复制
A a = MockRepository.GenerateMock<A>();
public void ShouldTest()
{
    B b = new B();
    b.methodB(a);
    a.AssertWasCalled(x=>x.methodA());
    a.VerifyAllExpectations();
}

但它给出了如下所示的错误: System.InvalidOperationException :没有设置要验证的预期,请确保操作中的方法调用是虚拟(C#) /可覆盖(VB.Net)方法调用。

那我怎么测试methodB呢??有人能帮忙吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-23 01:42:05

Rhino mock在调用MockRepository.Generate ***方法时创建代理类。这意味着它扩展了你的类型。如果你没有声明任何抽象,你就不能进行任何派生,这在任何mocking框架中都是必不可少的。

你可以做两件事

  1. 创建接口(更好的设计)
  2. 使成员成为虚拟的(这将允许RhinoMocks从您的类型派生并为虚拟成员

创建代理

示例代码

代码语言:javascript
复制
public interface IA { void methodA();}
public class A:IA{public void methodA() { }}
public class B
{
    public void methodB(IA a)
    {
        a.methodA();
    }
}

[TestFixture]
public class Bar
{
    [Test]
    public void BarTest()
    {
        //Arrange
        var repo = MockRepository.GenerateMock<IA>();

        //Act
        B b = new B();
        b.methodB(repo);

        //Assert
        repo.AssertWasCalled(a => a.methodA());
        repo.VerifyAllExpectations();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-01-23 01:18:39

您拥有的是没有虚方法和接口的具体类。你不能嘲笑任何东西。

更新:

这里有一种方法:

代码语言:javascript
复制
public interface IA
{
    void methodA();
}

public class A : IA
{
    public void methodA(){}
}
public class B
{
    public void methodB(IA a)
    {
      a.methodA();
    }
}

然后使用

代码语言:javascript
复制
IA a = MockRepository.GenerateMock<IA>();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8962812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档