我有一些常见的设置代码,我已将其考虑在标有@Before
的方法中。但是,并非所有这些代码都必须针对每个测试运行。有没有办法对其进行标记,以便@Before
方法仅在某些测试之前运行?
答案 0 :(得分:32)
将不需要设置代码的测试移出到单独的测试类中。如果你有一些其他常用的测试代码有助于保持,那就把它移到一个帮助类中。
答案 1 :(得分:3)
或使用TestNG。它为您提供了更精细的测试控制。
答案 2 :(得分:2)
也可以通过JUnit中的Assume来实现。然后,您可以检查要处理的方法名称@Before
。
public class MyTest {
@Rule
public TestName testName = new TestName();
@Before
public void setUp() {
assumeTrue(testName.getMethodName().equals("myMethodName"));
// setup follows
}
}
查看topic以获取有关@Rule
的更多见解。
答案 3 :(得分:1)
完全同意将相关代码移至内部类的观点。所以这就是我所做的。
代码如下:
class Testing {
@Test
public void testextmethod1() {
System.out.println("test ext method 1");
}
@Nested
class TestNest{
@BeforeEach
public void init() {
System.out.println("Init");
}
@Test
public void testmethod1() {
System.out.println("This is method 1");
}
@Test
public void testmethod2() {
System.out.println("This is method 2");
}
@Test
public void testmethod3() {
System.out.println("This is method 3");
}
}
@Test
public void testextmethod2() {
System.out.println("test ext method 2");
}
}
这是输出
test ext method 1
test ext method 2
Init
This is method 1
Init
This is method 2
Init
This is method 3
注意:我不确定Junit4是否支持此功能。我在JUnit5中这样做
答案 4 :(得分:0)
不确定@Before,但我最近提出了一个@After块选择性运行的策略。实施很直接。我有一些标志设置为默认值作为测试类的一部分。它们在@Before类中重置为默认值。在课堂上我需要做一些特定于旗帜的事情,我设置了那些旗帜和放大器。在@After我检查标志值以执行相应的作业。
答案 5 :(得分:0)
JUnit 4.12提供了封闭式Runner
@RunWith(Enclosed.class)
public class GlobalTest{
@RunWith(MockitoJUnitRunner.class)
public class InnerTest{
}
}