基于枚举测试条件

时间:2016-08-25 18:27:06

标签: java junit spock

当条件基于枚举的方法时,我应该测试单元测试中的每个条件吗?

我的意思是如果我有一个包含很多值的枚举,则单元测试太大而无法达到所有可能的条件。

示例:

public enum AnEnum {
   A(true), B(false), C(false), D(true);

   AnEnum(boolean isError) {
       this.isError = isError
   }
}

public class TestEnum {
    public String method(AnEnum anEnum) {
         if( anEnum.isError() ) {
              return "An Error";
         }
         return "Not An Error";
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用ParametrizedTests,例如:

@DataProvider
public static Object[][] provideEnumasAndExpectedErrorResult() {
  return new Object[][] {
    { AnEnum.A, true },
    { AnEnum.B, false }
  };
}

@Test
@UseDataProvider( "provideEnumasAndExpectedErrorResult" )
public void testEnumErrors( AnEnum enumConstant, boolean expectedResult expectedResult ) {
  assertThat( enumConstant.isError(), is(expectedResult));

这允许您以(某种方式)更清洁的方式记下您的所有枚举和预期结果。

答案 1 :(得分:0)

Spock的数据驱动测试很棒:

class AnEnumSpec extends Specification {

    def "has correct error status"() {
        expect:
        result == anEnum.isError

        where:
        anEnum   | result
        AnEnum.A | true
        AnEnum.B | false
        AnEnum.C | false
        AnEnum.D | true
    }
}