2013-04-27 42 views
-1

我试图做一个JUnit测试方法,如果RandomAccessFile的变量是零基础是什么OpenDB如下设置,将检查对象的JUnit测试。这种方法的两种可能结果是: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 
public void testOpenDB() 
{ 
    mainApp app = new mainApp(); 
    app.openDB(); 
    assertNull(app.getrStream()); 
} 
+2

问题是什么测试断言IOException? – 2013-04-27 17:16:43

+0

我想编写一个测试方法,如果输入的fileName不存在,它将传递异常。 – Liam 2013-04-27 17:18:14

+2

这实际上不是单元测试的目的。首先,他们不应该要求用户交互。根据定义,单元测试应该测试一个独立的,独立的代码单元。 http://stackoverflow.com/tags/unit-testing/info – 2013-04-27 17:19:15

回答

2

使用@Test标注的预期属性,就像这样:

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

无需窥探应用程序检查NUL的内部状态流的性质。

+0

测试仍然失败,因为它似乎在寻找IOException,即使我们的错误是FileNotFound异常。我试图将其更改为FileNotFoundException.class,并相应地抛出FileNotFoundException,但我仍然没有得到真正的结果。我是否认为这是为了回报真实还是假想返回假? – Liam 2013-04-27 17:32:02

+0

'FileNotFoundException'是'IOException'的一个子类,所以测试注释应该仍然有效。此外,测试不*返回* true或false - 它们通过或失败,取决于您所做的断言。当你写这样的测试时,你断言你期望抛出一个IOException的子类。 – 2013-04-27 17:51:08

+0

对不起,我打算说通过/失败。在这种情况下,预期的结果应该是通过还是失败,因为测试是期望IOException? – Liam 2013-04-27 17:58:52

1

您可以通过注释与

@Test(expected=IOException.class) 

假设你使用JUnit 4