Java 为将变为null的对象创建Junit测试

Java 为将变为null的对象创建Junit测试,java,junit,Java,Junit,我正在尝试制作一个Junit测试方法,该方法将根据如下所示的OpenDB设置检查randomAccessFile变量是否为null。此方法的两种可能结果是,rStream(randomAccessFile)将打开用户指定的文件,或者如果文件不存在,则引发IO异常,并将其保留为空。如果可能的话,我想让openDB方法保持无效,并相应地编写测试代码。谢谢 public void openDB(){ System.out.println("Name of your Database?\

我正在尝试制作一个Junit测试方法,该方法将根据如下所示的OpenDB设置检查randomAccessFile变量是否为null。此方法的两种可能结果是,rStream(randomAccessFile)将打开用户指定的文件,或者如果文件不存在,则引发IO异常,并将其保留为空。如果可能的话,我想让openDB方法保持无效,并相应地编写测试代码。谢谢

public void openDB(){
        System.out.println("Name of your Database?\n");
        this.rStream = new RandomAccess(kb.nextLine(), "r", true);
    }
(当前的测试。app.getrStream只返回有问题的rStream)


如果希望在
openDB
方法失败时断言结果,只需修改测试以使用
@test
注释的预期属性,如下所示:

@Test(expected = IOException.class)
public void testOpenDB() throws IOException {
    app.openDB();
}

无需窥探应用程序的内部状态来检查流的空值。

您可以通过使用注释测试来断言
IOException

@Test(expected=IOException.class)

假设您使用JUnit 4。

问题是什么?我想写一个测试方法,如果输入的文件名不存在,它将通过异常。这实际上不是单元测试的目的。首先,它们不需要用户交互。根据定义,单元测试应该测试一个独立的、自包含的代码单元。测试仍然失败,因为它似乎在寻找IOException,即使我们的错误是FileNotFound异常。我尝试将其更改为FileNotFoundException.class并相应地抛出FileNotFoundException,但仍然没有得到真正的结果。我假设这是要返回true还是要返回false是对的?
FileNotFoundException
IOException
的一个子类,因此测试注释应该仍然有效。此外,测试不会返回true或false——它们通过或失败取决于您所做的断言。当您编写这样的测试时,您断言您希望抛出IOException的子类。很抱歉,我的意思是说通过/失败。在这种情况下,预期的结果应该是通过还是失败,因为测试预期的是IOException?
@Test(expected=IOException.class)