2013-12-11 82 views
0

我希望能夠區分在JUnit @Before方法中執行的代碼和在實際測試中執行的代碼之間的區別。如何區分JUnit @Before和測試

我已經研究了擴展的TestWatcher,但是在@Before開始執行之前調用起始(Description)方法,而不是在測試開始之前調用。

理想情況下我在尋找這樣的情況:

A: [arbitrary code] 
B: JUnit @Before method 
C: [more arbitrary code] 
D: JUnit @Test method 

任何幫助或指導讚賞:)

+3

你爲什麼要這樣做? –

+1

「說出不同」是什麼意思?兩個地方的代碼是一樣的嗎? – jalynn2

+0

你的意思是說你想讓代碼在運行時知道它從哪裏被調用?或者你的意思是說你有一個例外,或者某個東西,而你不知道問題出在哪個代碼塊中? –

回答

0

如果你想動態取決於測試是否初始化或改變代碼的行爲運行時,您可以嘗試獲取當前線程的堆棧跟蹤並逐個瀏覽框架,直到找到一個註釋方法爲@Test@Before(或@BeforeClass)。

或者,您可以創建一個新的測試類跑步者(可能延伸BlockJUnit4ClassRunner)並用@RunWith(MyTestClassRunner.class)註釋您的測試類以使用它。關於如何做到這一點的好文章在這裏:http://tedyoung.me/2011/01/23/junit-runtime-tests-custom-runners/