[英]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.