.net 如何编写捕捉方法参数并在以后检查它们的模拟?
我正在寻找一种方法来捕获传递给方法的实际参数,以便稍后对其进行检查。其思想是获取传递的参数,然后对其执行断言 例如:.net 如何编写捕捉方法参数并在以后检查它们的模拟?,.net,mocking,.net,Mocking,我正在寻找一种方法来捕获传递给方法的实际参数,以便稍后对其进行检查。其思想是获取传递的参数,然后对其执行断言 例如: var foo = Mock<Foo>(); var service = Mock<IService>(); service.Expect(s => s.Create(foo)); service.Create(new Foo { Currency = "USD" }); Assert(foo.Object.Currency == "USD");
var foo = Mock<Foo>();
var service = Mock<IService>();
service.Expect(s => s.Create(foo));
service.Create(new Foo { Currency = "USD" });
Assert(foo.Object.Currency == "USD");
var foo=Mock();
var service=Mock();
Expect(s=>s.Create(foo));
创建(新Foo{Currency=“USD”});
断言(foo.Object.Currency==“USD”);
或者更复杂一点的例子:
Foo foo = new Foo { Title = "...", Description = "..." };
var bar = Mock.NewHook<Bar>();
var service = new Mock<IService>();
service.Expect(s => s.Create(bar));
new Controller(service.Object).Create(foo);
Assert(foo.Title == bar.Object.Title);
Assert(foo.Description == bar.Object.Description);
Foo-Foo=new-Foo{Title=“…”,Description=“…”};
var bar=Mock.NewHook();
var service=newmock();
Expect(s=>s.Create(bar));
新建控制器(service.Object).Create(foo);
断言(foo.Title==bar.Object.Title);
断言(foo.Description==bar.Object.Description);
如果您需要对传递给对象的参数进行断言,那么您似乎对错误的对象进行了测试。与其断言传递给方法的参数,不如为调用类编写一个测试,以断言传递了正确的参数。我认为您正在寻找与Moq回调等效的东西:
var foo = Mock<Foo>();
var service = Mock<IService>();
service.Setup(s => s.Create(foo.Object)).Callback((T foo) => Assert.AreEqual("USD", foo.Currency))
service.Object.Create(new Foo { Currency = "USD" });
var foo=Mock();
var service=Mock();
service.Setup(s=>s.Create(foo.Object)).Callback((tfoo)=>Assert.AreEqual(“USD”,foo.Currency))
Create(newfoo{Currency=“USD”});
另请参见:
//访问调用参数
mock.Setup(foo=>foo.Execute(It.IsAny()))
.Returns(true)
.Callback((字符串s)=>calls.Add);
我尝试测试该控制器。Create将创建并将正确的对象传递到IService.Create。
// access invocation arguments
mock.Setup(foo => foo.Execute(It.IsAny<string>()))
.Returns(true)
.Callback((string s) => calls.Add(s));