我知道 nUnit failed Assert 陳述句會引發例外,這就是測驗運行程式檢測錯誤發生的方式。我的問題是生產代碼中有一個通用的 try-catch 塊會吃掉這些 Assert 例外,并且 Unity 測驗運行器認為代碼運行沒有任何問題。我已將代碼簡化為:
[UnityTest]
public IEnumerator End2EndTests_Test_Foo()
{
try
{
Assert.Fail("Something is wrong.");
}
catch (Exception)
{
UnityEngine.Debug.Log("* Something went wrong. I ate this exception! yum yum *");
}
yield break;
}
正如我所提到的,這個測驗在 Unity Test Runner 中通過。有什么補救措施?
注 1:我沒有在生產代碼中放置任何斷言。斷言在生產代碼呼叫的回呼中。如果回呼中發生任何例外,生產代碼會捕獲它們。這就是生產代碼而不是測驗運行程式捕獲失敗的斷言例外的方式。
注2:一些背景:生產代碼向服務器發送請求。當它收到回應時,它會呼叫所有訂閱者(=回呼)。我的測驗代碼訂閱了 OnResponse 事件。失敗的斷言在該回呼中。一般的 try-catch 在生產代碼中,包含 OnResponse 事件的呼叫。
注意 3:我不想在生產代碼中為 nUnit 放置一個特殊的 catch 陳述句并重新拋出例外。這是一個糟糕的解決方案,因為生產代碼不應該對測驗框架有任何依賴。
uj5u.com熱心網友回復:
您的測驗可以訂閱回呼,但您不能在回呼呼叫的方法中斷言。你所能做的就是記錄資訊。
安裝回呼后,測驗本身應該等待回呼完成,然后對保存的資訊進行斷言。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405081.html
標籤:
