Java Junit预期异常失败

Java Junit预期异常失败,java,junit,Java,Junit,我试图测试一个load方法,它抛出一个StreamCorruptedException。但是当我用JUnit4测试它时,测试失败了 我的加载方法: public BookDataProvider(String filename) throws StreamCorruptedException { ... } 我的测试班: public class TestClass { @Test (expected=StreamCorruptedException.class) public

我试图测试一个load方法,它抛出一个StreamCorruptedException。但是当我用JUnit4测试它时,测试失败了

我的加载方法:

 public BookDataProvider(String filename) throws StreamCorruptedException { ... }
我的测试班:

public class TestClass {
   @Test (expected=StreamCorruptedException.class)
   public void wrongFileTest() throws StreamCorruptedException  {
       BookDataProvider bdp = new BookDataProvider("wrong filename");
   }
}

该方法抛出异常,但测试失败。我做错了什么?

从您的代码中,我看到您的测试将错误的文件名传递给
BookDataProvider
构造函数,这不会导致StreamCorruptedException,它只会导致IOException。StreamCorruptedException是由于数据反序列化失败而发生的,主要原因是用于写入和读取的流存在差异。例如,如果数据不是使用ObjectOutputStream写入的,则在尝试使用ObjectInputStream读取数据时会发生这种情况。

看起来不错,您确定该异常吗?也许不一样?是的,我以前也有过。。。将包添加到类前面以确保。另外,请尝试捕获Exception.class,然后转到您自己的。如果删除批注,是否会看到异常?请尝试删除批注并捕获异常,以查看您是否得到了您想要的东西。如果是这样,那么我们可以挖得更深一点。您是否可以在StreamCorruptedException到达测试用例之前捕获它并重新抛出其他内容?我发现我必须在读取文件后添加catch(IOException I){}和catch(ClassNotFoundException c){}。StreamCorruptedException是扩展IOException,因此它在load方法中捕获,而不是抛出。我试图在IOException之前添加catch(StreamCorruptedException s),但没有成功。请提供new BookDataProvider的Stacktrace(“错误的文件名”),它可能是一个例外初始化错误,文件名为“存在错误的文件名,但它是一个映像,因此它应该抛出StreamCorruptedException”。