是否可以在具有用@Before
注释的方法的类中运行JUnit @Test
方法,但仅在此测试中忽略@Before
方法?
编辑:如果JUnit支持此功能,而不是解决方法,我感兴趣。我知道一些解决方法,例如在另一个类中移动测试或删除注释并在每个测试方法中手动调用setUp()
。
假设在一个类中有 30 个测试,对于其中的 29 个测试@Before
真正简化了测试初始化,但对于其中一个(或多个)测试是无用的/它使事情复杂化。
public class MyTestClass {
@Before
public void setUp() {
//setup logic
}
@Test
public void test1() {
//[...]
}
@Test
public void test2() {
//[...]
}
//more tests here
@Test(ignoreBefore = true, ignoreAfter = true //false by default)
//something equivalent to this
public void test20() {
//[...]
}
}
TestRule执行此操作。请参阅我对在 JUnit 中的"之前"方法中排除单个测试的回答。基本上,实现 ExternalResource,并在 apply 方法中,检查该方法上是否有特定的注释,如果有,请不要运行 before/after 方法。不过,您必须专门从规则中调用之前/之后。
如果它无用,它应该不是问题 - 再次运行设置会有害吗?
但是我认为这是不可能的,并将我视为跛子功能。
另一种方法 - 将该测试移动到单独的测试类。
使用 JUnit 5 您可以使用@Nested注释进行嵌套测试:
public class MainClass {
@Nested
class InnerClass1 {
@BeforeEach
void setup(){}
@Test
void test1(){}
}
@Nested
class InnerClass2 {
// No setup
@Test
void test2(){}
}
}
补充一点,我在最近访问这个地区时发现了一些东西。
Junit/Mockito似乎优先考虑测试中定义的模拟行为,而不是@Before注释的方法。