.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));