Java JUnit/TestNg:如何简化/组合同一异常的多个{try fail()catch}?
示例(Java JUnit/TestNg:如何简化/组合同一异常的多个{try fail()catch}?,java,unit-testing,junit,testng,Java,Unit Testing,Junit,Testng,示例(断言1和断言2的相同): @junit.framework.Test//或@org.testng.annotations.Test 公共无效测试用例(){ 试一试{ //断言1 失败(); }捕获(){ } 试一试{ //断言2 失败(); }捕获(){ } } 如果很难将其分解为单独的测试方法,下面是过去对我有效的方法 创建一个方法expectsException(),该方法需要回调 interface Callback { void call() throws Exceptio
断言1
和断言2
的
相同):
@junit.framework.Test//或@org.testng.annotations.Test
公共无效测试用例(){
试一试{
//断言1
失败();
}捕获(){
}
试一试{
//断言2
失败();
}捕获(){
}
}
如果很难将其分解为单独的测试方法,下面是过去对我有效的方法
创建一个方法expectsException()
,该方法需要回调
interface Callback {
void call() throws Exception;
}
void expectsException(Callback callback) {
try {
callback.call();
fail("ExpectedException was not thrown!");
} catch (Exception e) {
if (!(e instanceof ExpectedException)) {
fail("Expecting ExpectedException, got " + e.getClass());
}
assertEquals("Expected exception message", e.getMessage());
}
}
然后,将代码包装在回调中的try{…}catch
块中:
@Test
public void testSomething() {
expectsException(new Callback() {
public void call() throws Exception {
// assert 1
}
});
expectsException(new Callback() {
public void call() throws Exception {
// assert 2
}
});
}
但是请注意,根据您在catch
块中所做的操作,这可能会或可能不会比直接的try{…}catch
更详细
(当Java获得适当的闭包时,这种方法将更有意义。)如果很难将其分解为单独的测试方法,那么下面是过去对我有效的方法
创建一个方法expectsException()
,该方法需要回调
interface Callback {
void call() throws Exception;
}
void expectsException(Callback callback) {
try {
callback.call();
fail("ExpectedException was not thrown!");
} catch (Exception e) {
if (!(e instanceof ExpectedException)) {
fail("Expecting ExpectedException, got " + e.getClass());
}
assertEquals("Expected exception message", e.getMessage());
}
}
然后,将代码包装在回调中的try{…}catch
块中:
@Test
public void testSomething() {
expectsException(new Callback() {
public void call() throws Exception {
// assert 1
}
});
expectsException(new Callback() {
public void call() throws Exception {
// assert 2
}
});
}
但是请注意,根据您在catch
块中所做的操作,这可能会或可能不会比直接的try{…}catch
更详细
(当Java获得适当的闭包时,这种方法将更有意义。)您可能应该将您的方法分成两个单独的方法,每个方法将抛出:
@Test(expectedExceptions = NullPointerException.class)
public void testCase1() {
// assert 1
}
@Test(expectedExceptions = NullPointerException.class)
public void testCase2() {
// assert 2
}
您可能应该将方法分成两个单独的方法,每个方法都会抛出:
@Test(expectedExceptions = NullPointerException.class)
public void testCase1() {
// assert 1
}
@Test(expectedExceptions = NullPointerException.class)
public void testCase2() {
// assert 2
}
如果您有冒险精神,也可以尝试assertThrows:
如果您有任何问题,请随时询问。如果您喜欢冒险,您也可以尝试assertThrows:
如果您有任何问题,请随时询问。可能有帮助:
public void testCase() {
// assert 1
verifyException(obj, MyException.class).do(1);
// assert 2
verifyException(obj, MyException.class).do(2);
}
可能有助于:
public void testCase() {
// assert 1
verifyException(obj, MyException.class).do(1);
// assert 2
verifyException(obj, MyException.class).do(2);
}
如果我正确读取了您的意图,try{…}catch
中的每个块都应该抛出ExpectedException
(否则,这就是测试失败)。将此测试分解为多个方法,每个方法都用@test(expected=ExpectedException.class)
注释是否太难?@Cedric&AlistairIsrael:谢谢您的回答。但是我希望有一种更简单的方法。如果我正确地阅读了您的意图,那么try{…}catch
中的每个块都应该抛出ExpectedException
(否则,这就是测试失败)。将此测试分解为多个方法,每个方法都用@test(expected=ExpectedException.class)
注释是否太难?@Cedric&AlistairIsrael:谢谢您的回答。但我希望有一个更简单的方法。太好了!谢谢你的努力,太好了!谢谢你的努力。