我正在尝试对我的代码做一个分支和条件测试,这很简单。
package testing;
import java.util.*;
public class Exercise1 {
private String s;
public Exercise1(String s) {
if (s == null || s.length() == 0)
throw new IllegalArgumentException("s == null || s.lenght() == 0");
this.s = s;
}
}
在分支和cond测试中,我必须检查代码中的每一个条件,因此在我的例子中,我必须在字符串预期为空且size=0时进行测试。我在测试类中看到了这一点:
package testing
import static org.junit.*;
import org.junit.jupiter.api.Test;
class Exercise1Test{
@Test(expected = IllegalArgumentException.class)
public void stringNull() {
new Exercise1(null);
}
}
但是java不能识别“expected”。我怎么才能检查字符串是否为空呢?
1条答案
按热度按时间bbuxkriu1#
@Test(expected = ...)
只能与JUnit 4一起使用。JUnit 5有Assertions.assertThrows
作为替代。它允许您Assert不仅整个测试方法抛出异常,而且即使是其中的一小部分也抛出异常。这也已向后移植到JUnit 4.13。您的测试方法将变成这样(使用
Assertions.assertThrows
的静态导入):但是它变得更好-
assertThrows
返回抛出的异常。它允许您在抛出异常后对异常执行Assert。它可以与JUnit 4的ExpectedException
规则相比较。关于使用
assertThrows
的警告:例如,对于下面的代码,你不知道是什么导致了IllegalArgumentException
--对new Exercise
的调用,还是对constructMessage
的调用。建议在调用
assertThrows
之前初始化这些参数:顺便说一句,您的导入混合了JUnit 4(
org.junit.*
)和JUnit 5(org.junit.jupiter.api
)。只需删除JUnit 4的导入。