使用例外测试代码,同时没有例外(JAVA)

时间:2014-12-19 07:02:15

标签: java unit-testing testing testng mockito

我正在为已经构建的java类函数编写测试。我正在使用Testng和Mockito编写测试并拥有数据提供程序。

这是我的测试

@Test(dataProvider = "myProvider", dataProviderClass = StaticDataProvider.class,
        expectedExceptions = SomeException.class)

public void myControllerTest(String argument) throws Exception {
    // Mocked object bussiness\
    Boolean resultantObject = business.getList(argument);
    Assert.assertTrue(resultantObject);
}

这是我想要测试的控制器

public Boolean controller(String argument) {
    if(argument != null) {
        throw new someException();
    } else {
        System.out.println("Sucess");
        return true;
    }
}

这是我的Data Providor

@DataProvider(name = "myProvider")
public static Object[][] getDirectoryList() throws Exception {
    Object[][] result = null;
    // case1 throws SomeException
    String testData1 = null;
    // case2 don't throw exception
    String testData2 = "String";
    result = new Object[][] { { testData1 }, { testData2 } };
    return result;
}

我面临的问题是,我不想创建另一个测试只是为了测试bug和非bug的代码并使用单个测试用例完成我的测试覆盖。但是当我将Expected Exception放在最前面时,它会在正确的代码上失败,而当我不这样做时,它会在错误的代码上失败。

注意:这是示例代码,可能无效,这只是为了了解我正在处理的方案以及我期待的内容。

1 个答案:

答案 0 :(得分:2)

即使您忽略了" 一个测试,一个断言"纯粹的观点,我认为大多数人都同意你应该将涉及错误条件的测试与证明正常行为的测试分开。

如果您想在一次测试中测试多个错误情况(或者如果您真的热衷于继续执行您的计划),则可以使用此模式:

try {
  // something that should cause an exception
  fail("Exception expected");
} catch (ExactlyTheRightException e) {
  // ignored
}