Java 当测试不应';你不会失败吧?
我有一个测试用例:Java 当测试不应';你不会失败吧?,java,unit-testing,junit5,Java,Unit Testing,Junit5,我有一个测试用例: void loadFromJson() throws Exception { assertThrows(FileNotFoundException.class, ()-> JsonReader.loadFromJson(".json")); } 这应该引发FileNotFoundException。。。而且它确实 java.io.FileNotFoundException: .json (No such file or directory) at java.i
void loadFromJson() throws Exception
{
assertThrows(FileNotFoundException.class, ()-> JsonReader.loadFromJson(".json"));
}
这应该引发FileNotFoundException。。。而且它确实
java.io.FileNotFoundException: .json (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at org.avalin.optaplanner.json.JsonReader.loadFromJson(JsonReader.java:29)
我的测试失败了。。。当它实际抛出请求的异常时,这怎么可能呢?我不熟悉
jupiter.api.AssertThrows
,但是很容易设置一个忽略/绕过该异常的测试,只测试代码的lambda方面
这里的要点是,创建lambda不会运行代码,除非您,呃,运行代码
例如,这里有3个单元测试test1
和test3
都会抛出AssertionError
,但test2
不会。这在AssertThrows()
中是如何工作的,我将让您或其他人回答
public class TestTest {
@Test(expected = AssertionError.class)
public void test1() {
throw new AssertionError();
}
@Test(expected = AssertionError.class)
public void test2() {
Runnable r = () -> {throw new AssertionError();};
}
@Test(expected = AssertionError.class)
public void test3() {
Runnable r = () -> {throw new AssertionError();};
r.run();
}
}
JsonReader
是否正在捕获异常?可能会抛出一个不同的异常?是什么让你认为它抛出了异常?我是说。。。如果它真的抛出异常,那么只有两种可能的结果:1)有人在它到达您的测试方法之前捕获它,或者2)它传播回您的测试方法。那么这对你来说是什么情况呢?你们都是对的,在JsonReader中捕获异常是一个愚蠢的错误——我有点困惑,因为我认为第一部分意味着它实际上被抛出了。非常感谢。
public class TestTest {
@Test(expected = AssertionError.class)
public void test1() {
throw new AssertionError();
}
@Test(expected = AssertionError.class)
public void test2() {
Runnable r = () -> {throw new AssertionError();};
}
@Test(expected = AssertionError.class)
public void test3() {
Runnable r = () -> {throw new AssertionError();};
r.run();
}
}