2017-03-10 22 views
1

我編寫JUnit5擴展。但是我無法想象如何獲得測試結果。JUnit5 - 如何在AfterTestExecutionCallback中獲取測試結果

擴展看起來是這樣的:

import org.junit.jupiter.api.extension.AfterTestExecutionCallback; 
import org.junit.jupiter.api.extension.TestExtensionContext; 

public class TestResultExtension implements AfterTestExecutionCallback { 
    @Override 
    public void afterTestExecution(TestExtensionContext context) throws Exception { 
     //How to get test result? SUCCESS/FAILED 
    } 
} 

任何提示如何獲取測試結果?

+0

什麼是你的使用情況?使用當前快照和即將到來的里程碑(M4),您可以[插入自己的TestExecutionListener](http://junit.org/junit5/docs/snapshot/user-guide/#launcher-api-listeners-custom)。 –

+0

我在這裏描述了我的用例。 https://github.com/junit-team/junit5/issues/542 –

回答

3

正如其他答案指出的,JUnit communicates failed tests with exceptions,所以AfterTestExecutionCallback可以使用to gleam what happened。請注意,這很容易出錯,因爲稍後運行的擴展可能仍然會通過測試。

另一種方法是register a custom TestExecutionListener。雖然這兩種方法都有些迂迴。有一個問題跟蹤a specific extension point for reacting to test results,這可能是對您的問題最直接的答案。如果你可以提供一個特定的用例,那麼如果你可以轉到#542並留下描述它的評論,那將是非常好的。

1

我只有這個解決方案:

String testResult = context.getTestException().isPresent() ? "FAILED" : "OK"; 

看來,它工作得很好。但我不確定它是否能在所有情況下正常工作。

+0

你是否嘗試過這兩種情況。當測試通過並失敗?我認爲這不起作用。 – nullpointer

+1

是的,我做過。我試過通過測試。和測試,其中斷言失敗。 –

+0

更新後的版本現在可用,但其可靠性不太確定。 – nullpointer

0

JUnit中的失敗會傳播,但有異常。有幾個例外,它們表示各種類型的錯誤。因此,TestExtensionContext#getTestException()中的例外表示錯誤。該方法無法處理實際的測試結果,因此根據您的使用情況,您可能需要執行TestExecutionExceptionHandler,這允許您吞下異常,從而更改測試是否成功。

1

這項工作對我來說:

public class RunnerExtension implements AfterTestExecutionCallback { 

    @Override 
    public void afterTestExecution(ExtensionContext context) throws Exception { 
     Boolean testResult = context.getExecutionException().isPresent(); 
     System.out.println(testResult); //false - SUCCESS, true - FAILED 
    } 
} 

@ExtendWith(RunnerExtension.class) 
public abstract class Tests { 

} 
相關問題