首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rhino Mocks Restub函数

Rhino Mocks Restub函数
EN

Stack Overflow用户
提问于 2010-10-14 17:34:51
回答 4查看 2.4K关注 0票数 2

有时,我在测试类设置中使用存根依赖,然后希望在具体的测试中重新存根其中的一些。但是Rhino mocks只记住第一个存根的值,这有点不方便。

代码语言:javascript
复制
someStub.Stub(x => x.SomeMethod(1)).Return(100);
var value1 = someStub.SomeMethod(1);
someStub.Stub(x => x.SomeMethod(1)).Return(200);
var value2 = someStub.SomeMethod(1);

值2将等于100。

这是设计好的行为吗?有什么变通方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-07 04:26:15

我遇到了自己做这件事的需要。我通过使用WhenCalled函数解决了这个问题,在这个函数中,您传入了一个要在调用该函数时执行的操作。这将为您提供更多的灵活性,您可以在不同的点返回什么。

有关此堆栈溢出线程的更多信息/活动:Rhino Mocks: Re-assign a new result for a method on a stub和此处:Changing previously stubbed calls with Rhino Mocks

我知道这是旧的,但希望它能帮助其他人。

票数 1
EN

Stack Overflow用户

发布于 2010-10-14 17:49:01

你可以通过继承来解决这个问题。如果您有一个基本测试类和一些运行测试的测试子类,则可以将返回值设置为基本测试类的protected属性,并将子类中的值设置在base之前的某个点。调用Initialize。因此(使用MSTEST)您可以拥有:

在您的基类中:

代码语言:javascript
复制
protected int ReturnVal{get; set;}

public void Init()
{
someStub = MockRepository.GenerateMock<ISomeStub>();
someStub.Stub(x => x.SomeMethod(1)).Return(ReturnVal);
}

在您的子类中:

代码语言:javascript
复制
  [TestInitialize]
    public override Init()
    {
    ReturnVal = 200;
    base.Init();
    }
票数 1
EN

Stack Overflow用户

发布于 2010-10-14 20:32:00

是的,这是设计好的行为。

我大多数时候使用的变通方法是创建一个帮助方法,它将为您设置存根,即:

代码语言:javascript
复制
private X MockX()
{
  return MockX(100);  
}

private X MockX(int returnValue)
{
  var x = MockRepository.GenerateStub<X>();
  someStub.Stub(x => x.SomeMethod(1)).Return(returnValue);
  return x;
}

然后在测试中,不使用在SetUp中创建的模拟,而是调用适当的函数。附加的好处是,很明显,您的测试使用了返回值的一些特殊值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3931842

复制
相关文章

相似问题

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