我正在为已经构建的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;
}
}
这是我的数据提供者
@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;
}
我面临的问题是,我不想创建另一个测试来测试错误和非错误代码并使用单个测试用例完成我的测试覆盖率。但是当我把预期异常放在上面时,它在正确的代码上失败,当我不这样做时,它在错误代码上失败。
注意:这是示例代码,可能不起作用,这只是为了了解我正在处理的场景和我的期望。
即使你忽略了">一个测试,一个断言"的纯粹观点,我认为大多数人都同意你应该将涉及错误条件的测试与证明正常行为的测试分开。
如果要在一个测试中测试多个错误条件(或者如果您真的热衷于继续执行计划(,则可以使用以下模式:
try {
// something that should cause an exception
fail("Exception expected");
} catch (ExactlyTheRightException e) {
// ignored
}