如何对多个测试用例使用@Before 注解?

How do you use the @Before annotation for multiple test cases?

对于 Junit 测试,@Before 注释究竟是如何工作的?我希望能够传入一个参数来标记我在 class 中我是 运行 的测试用例,因为每个测试用例都有不同的 URL 我传入。

对于每个测试方法:

  1. 每个@Before方法是运行
  2. 那么测试方法就是运行
  3. 然后每个@After方法是运行.

在你的情况下,我更倾向于提取到私有方法:

@RunWith(JUnit4.class)
public class YourClass {

  private void prepareTest(String url) { /* ... */ }

  @Test public void firstTest() {
    prepareTest("http://foo.bar/");
    /* ... */
  }

  @Test public void secondTest() {
    prepareTest("http://baz.quux/");
    /* ... */
  }
}

如果测试用例的数量确实需要单独的参数化处理,您可以考虑使用 Parameterized 测试 运行ner,它允许您指定一个 List<Object[]> 用于构造函数参数关于测试 class 本身。

(您也可以考虑创建一个自定义的 JUnit4 Runner,但是每个测试方法都需要某种方式来指定它所需要的 URL,因此这可能不会比上面的解决方案。)