NMock3是我选择的模拟框架,但我正在努力让它做我想做的事情。
例如:
var mockFactory = new MockFactory();
var mockA = mockFactory.CreateMock<ObjectA>();
mockA.Expects.One.Method(c => c.BuildObjectB(null))
.With(Is.TypeOf(typeof(string)))
.WillReturn(new ObjectB(<?>));在WillReturn中新建ObjectB时,如何访问ObjectB接收到的参数?使用NMock3可以做到这一点吗?
谢谢!
发布于 2013-02-13 17:44:04
我不认为NMock3库允许您这样做。文档很少,但我已经浏览了NMock3的Acceptance Tests,但找不到一个可以做这样的事情。
我不认为这是一件非常糟糕的事情。单元测试通常是确定性的,因此可以提前知道String的值是什么。单元测试是一个重复自己是件好事的地方。它使测试变得更简单和更具可读性。因此,在您的示例中,我会选择简单但完全可读的go
var mockFactory = new MockFactory();
var mockA = mockFactory.CreateMock<ObjectA>();
mockA.Expects.One.Method(c => c.BuildObjectB("Frank")).WillReturn(new ObjectB("Frank"));我可以想到一些(罕见的)不确定的情况,例如,返回一个DateTime,而您事先不知道它会是哪一个。或者,这个函数可能会被调用很多次,使用不同的参数。在这些情况下,您可以使用一个简单的存根来跟踪它被调用的次数。
发布于 2016-09-14 16:00:59
您可以使用Collect.MethodArgument:
var mockFactory = new MockFactory();
var mockA = mockFactory.CreateMock<ObjectA>();
mockA.Expects.One.Method(c => c.BuildObjectB(null))
.With(Is.TypeOf(typeof(string)))
.WillReturn(Collect.MethodArgument<string>(0, delegate(string myString) { new ObjectB(myString); }));https://stackoverflow.com/questions/14850097
复制相似问题