我為我的測驗專案開發了一個 CustomAttribute 類,如下所示:
[Test, CustomAttribute]
它的作業是在進入時獲取當前的測驗名稱,使用以下代碼:
var testName = TestContext.CurrentContex.Test.Name
每次呼叫它時,至少有一個該字串的實體:
AdHockTestMethod
我從來不知道為什么;但我放入了一個過濾器來忽略它,因為那不是我需要的測驗名稱。(這似乎是 NUnit 內部的事情,可能基于我對 BaseClass 的使用,它需要在靜態類中使用 OneTimeSetUp 來啟動記者)。
- NUnit 多次呼叫這個 CustomAttribute,最終測驗名稱是正確的。
- 直到今天,帶有AdHockTestMethod過濾器的 CustomAttribue 代碼仍然有效。
- 但是今天 TestName 總是 AdHocTestMethod
- 我似乎無法找出為什么會發生這種情況。還有什么我想念的嗎?
我的測驗代碼只是這樣的:
[TestFixture]
public class TestClassName: BaseClass {
[Test, CustomAttribue]
public async Task TestName(){
}
// do something asynchronous here
}
uj5u.com熱心網友回復:
當您在創建測驗背景關系之前嘗試訪問測驗背景關系時,NUnit 會創建一個 AdhocTestContext。臨時背景關系中(不存在的)測驗方法的名稱是 AdHocTestMethod。我懷疑這就是你得到的。
臨時背景關系在特定場景中很有幫助,這就是我們實施它的原因。然而,這是一種非常罕見的情況,而且在更正常的情況下,臨時背景關系可能會非常混亂。
您尚未發布任何代碼來指示您在代碼中訪問 TestContext 的位置,但最常見的錯誤是嘗試在 TestCaseSource 方法中訪問它,該方法在測驗執行期間并未呼叫,而是一個世紀左右(在計算機時間)之前。:-)
但愿我的猜測幫助,但如果沒有,請編輯的問題,包括代碼顯示在那里你創建和使用的TestContext。
uj5u.com熱心網友回復:
CustomAttribute 代碼如下所示:
public class CustomAttribute:Attribue{
public void CustomAttribute(){
var TestName = TestContext.CurrentContext.Test.Name;
if(TestName == "AdhocTestMethod"){
Nlog.info("Testname was AdhocTestMethod");
return;
}
Start(TestName);
}
private void Start(string TestName){
Reporter.StartTest(TestName);
}
}
uj5u.com熱心網友回復:
結果證明根本原因是上面顯示的異步方法宣告。一旦我洗掉了那部分并使用 Task.Run with Async(在方法內部),一切正常。更新后的代碼如下所示:
[Test, CustomAttribute]
public void TestName(){
Task.Run(async ()=> await doSomething());
}
TestContext.CurrentContext.Test.Name 回傳了正確的測驗名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372177.html
上一篇:我如何在C#中進行單元測驗
下一篇:鍵值對值問題應用設定
