我希望能够区分在JUnit @Before方法中执行的代码与在实际测试中执行的代码之间的区别。
我已经考虑扩展TestWatcher,但是在@Before开始执行之前调用了启动(描述)方法,而不是在测试开始之前调用。
理想情况下,我正在寻找这种情况:
A: [arbitrary code]
B: JUnit @Before method
C: [more arbitrary code]
D: JUnit @Test method
感谢任何帮助或指导:)
答案 0 :(得分:0)
如果您尝试根据测试是初始化还是正在运行而动态改变代码行为,您可以尝试获取当前线程的堆栈跟踪并逐步执行这些帧,直到您找到一个方法注释为@Test
或@Before
(或@BeforeClass
)。
或者,您可以创建一个新的测试类运行器(可能会扩展BlockJUnit4ClassRunner
)并使用@RunWith(MyTestClassRunner.class)
注释您的测试类以使用它。关于如何执行此操作的好文章在此处:http://tedyoung.me/2011/01/23/junit-runtime-tests-custom-runners/