我试图建立与犀牛嘲笑存根返回基于值是什么传入的参数的参数从参数返回一个复杂数据类型与犀牛嘲笑
例:
//Arrange
var car = new Car();
var provider= MockRepository.GenerateStub<IDataProvider>();
provider.Stub(
x => x.GetWheelsWithSize(Arg<int>.Is.Anything))
.Return(new List<IWheel> {
new Wheel { Size = ?, Make = Make.Michelin },
new Wheel { Size = ?, Make = Make.Firestone }
});
car.Provider = provider;
//Act
car.ReplaceTires();
//Assert that the right tire size was used when replacing the tires
问题是我希望Size是被传递到方法中的任何东西,因为我后来实际上声称轮子尺寸合适。这并不是为了证明数据提供者工作起来很明显,因为我把它扼杀了,而是证明正确的大小通过了。
我该怎么做?
@David WhenCalled是我最终必须采取的确切方法。它允许我确保我将参数传递给模拟,然后再进行验证。如果有一些方法可以使用WhenCalled功能而无需使用Return功能,或者可能只是以某种方式将它们合并在一起,那将会非常棒。 – Joseph 2010-04-12 01:57:27
@Joseph, 避免必须使用WhenCalled/Return的最简单的方法是确保控制传递给GetWheelsWithSize的值(而不是使用Arg .Is.Anything),因此我的答案中提出了第一个建议。如果你无法获得它的价值,那么它可能是值得重构的,这样逻辑就是孤立的,并且是单元可测试的。 –
2010-04-12 02:41:24