我刚开始使用 Rhino mock 为我的项目设置测试用例。 .Return(objToReturn:list) 究竟做了什么?
它似乎只有在我初始化并填充列表然后将它传递给模拟 stub 方法时才有效。我假设我可以使用 Mock Stub 方法来填充列表,然后返回填充的列表。
....
private ProductRepository _productRepository;
private IProductRepository _productRepositoryStub;
[SetUp]
public void SetUp()
{
_productRepository = new ProductRepository();
//Testing using Rhino Mocks
//Generate stub
_productRepositoryStub = MockRepository.GenerateMock<IProductRepository>();
}
[Test]
public void Canquerydb()
{
IList list = _productRepository.GetAllProducts();
_productRepository.Stub(x=> x.GetAllProducts()).Return(list);
_productRepositoryStub.AssertWasCalled(x => x.GetAllProducts());
}
/// <summary>
/// Refaactor and use MockRhino here
/// </summary>
[Test]
public void can_insert_product()
{
IProduct product = new Grains("Cheese Bread", "Dairy grain", 0);
_productRepository.SaveProduct(product);
_productRepositoryStub.Stub(x=>x.SaveProduct(product));
_productRepositoryStub.AssertWasCalled(x => x.SaveProduct(product));
}
最佳答案
回答你的问题的标题:Rhino mocks 区分了 Mocks 和 Stubs。 Mock 是唯一可以使测试失败的东西,因为它是您正在测试的东西的包装实例 - 您的被测系统 (SUT)。你在 Rhino 模拟中“ stub ”一些东西,这样你就可以满足模拟对象的依赖关系。 stub 使您可以看到传递给它的参数,并让您控制返回结果,以便您可以完全隔离地对 Mock 的行为进行断言。
该站点还有更多 explanation of Mocks and Stubs 。
另外,像 Moq 这样的库不会区分 Mocks 和 Stubs。通过使用泛型,您不必模拟您的 SUT。我个人更喜欢 Moq 的这种简单性。
关于c# - 为什么要使用 Rhino Mock Stub 方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14571943/