gpt4 book ai didi

java - jUnit 测试用例应该在 throws 声明中还是在 try catch block 中处理默认异常

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:41 25 4
gpt4 key购买 nike

如果我为一个抛出一堆异常的函数编写测试用例,我应该在我的测试方法中为这些异常添加一个 throws 声明,还是应该捕获每个单独的异常。正确的做法是什么?我相信 try-catch 是一种更好的方法,但我应该在 catch block 中打印堆栈跟踪吗?

例如,我有一个方法 getGroups(String name) 会抛出 AuthenticationException。如果我编写一个测试用例来检查当 name 参数为 null 时是否抛出 IllegalArgumentException,我该如何处理 AuthenticationException?我是将它添加到我的方法的 throws 部分还是应该将异常包含在 try-catch block 中。

@Test
public void testGetGroupsWithNull() throws AuthenticationException {
thrown.expect(IllegalArgumentException.class);
getGroups(null);
}

在上面的测试用例中,我只是添加了一个throws AuthenticationException,但我想知道将异常包含在try-catch block 中是否更好,以及在捕获异常后我应该做什么异常(exception)。我可以打印堆栈跟踪。

我正在处理意外异常 AuthenticationException,方法是不将其放在“throws”子句中,而是放在 try/catch block 中。

@Test
public void testGetGroupsWithNull() {
thrown.expect(IllegalArgumentException.class);
try {
getGroups(null);
} catch(AuthenticationExcption e) {
Assert.fail("Authentication Exception");
}
}

最佳答案

JUnit 在这里有一篇很棒的文章:https://github.com/junit-team/junit/wiki/Exception-testing在这个问题上。你可以这样做:

@Test(expected= IndexOutOfBoundsException.class) 
public void empty() {
new ArrayList<Object>().get(0);
}

或者:

@Test
public void testExceptionMessage() {
try {
new ArrayList<Object>().get(0);
fail("Expected an IndexOutOfBoundsException to be thrown");
} catch (IndexOutOfBoundsException anIndexOutOfBoundsException) {
assertThat(anIndexOutOfBoundsException.getMessage(), is("Index: 0, Size: 0"));
}
}

关于java - jUnit 测试用例应该在 throws 声明中还是在 try catch block 中处理默认异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com