[英]How to make FakeItEasy capture full argument state?
我有一段这样的代码(简化):
await realApiClient.DoSomething(entity);
entity.Email = newEmail;
await realApiClient.DoSomethingElse(entity);
在我的测试中,我创建了一个假的,并想检查是否调用了DoSomething
和DoSomethingElse
。 所以我这样做:
A.CallTo(() => fakeApiClient.DoSomething(A<Entity>
.That.Matches(p => p.Email == "p123@okdomain.com"
)))
.MustHaveHappenedOnceExactly();
A.CallTo(() => fakeApiClient.DoSomethingElse(A<Entity>
.That.Matches(p => p.Email != "p123@okdomain.com"
)))
.MustHaveHappenedOnceExactly();
问题 - DoSomething
的测试失败,因为 FakeItEasy 似乎没有捕获方法调用参数的完整状态。 当我在DoSomething
调用中检查电子邮件时,FakeItEasy 正在检查entity.Email = newEmail;
中更新的值。 而不是更新前的原始值。
一旦我注释掉entity.Email = newEmail;
然后DoSomething
测试成功。 但是,当然, DoSomethingElse
确实失败了,因为它希望更改电子邮件。
在调用DoSomething
时访问参数状态的正确方法是什么?
FakeItEasy 不会(并且可能永远不会)存储对象状态的快照,原因主要在MustHaveHappened 的公认答案中讨论过,当在同一个对象上调用两次时失败,以及在使用引用参数验证多个方法调用中。
那里有关于手动捕获重要状态以在调用之间保留它的提示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.