繁体   English   中英

如何让 FakeItEasy 捕获完整的参数状态?

[英]How to make FakeItEasy capture full argument state?

我有一段这样的代码(简化):

await realApiClient.DoSomething(entity);
entity.Email = newEmail;
await realApiClient.DoSomethingElse(entity);

在我的测试中,我创建了一个假的,并想检查是否调用了DoSomethingDoSomethingElse 所以我这样做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM