簡體   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