相同方法的成功和失败测试用例的放置

mis*_*tor 2 java testing junit unit-testing

假设我有一个名为的方法foo,对于某些输入值集,预计会成功完成并返回结果,而对于其他一些值集,预计会抛出某个异常。此方法需要先设置一些东西,然后才能进行测试。

鉴于这些条件,将成功和失败测试集中在一个测试中更好,还是应该在单独的测试方法中维护这些案例?

换句话说,以下两种方法中哪一种更可取?

方法一:

@Test
public void testFoo() {
  setUpThings();
  // testing success case
  assertEquals(foo(s), y);
  // testing failure case
  try {
    foo(f);
    fail("Expected an exception.")
  } catch (FooException ex) {
  }
}
Run Code Online (Sandbox Code Playgroud)

方法二:

@Test
public void testFooSuccess() {
  setUpThings();
  assertEquals(foo(s), y);
}

@Test
public void testFooFailure() {
  setUpThings();
  try {
    foo(f);
    fail("Expected an exception.")
  } catch (FooException ex) {
  }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 5

最好采用方法#2。

为什么:

好吧,当断言失败时,方法的其余部分不会被评估......所以通过将测试放在 2 个单独的方法中,你肯定至少会执行两个测试......失败与否。

单元测试不仅应该关注一个特定的单元,还应该关注该单元的一个特定行为。一次测试多种行为只会让水变得混乱。花时间将每个行为分成自己的单元测试。