Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当测试不应';你不会失败吧?_Java_Unit Testing_Junit5 - Fatal编程技术网

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();
   }
}