java - 为什么这个 Expect Exception Junit 测试不起作用?

标签 java testing junit expected-exception

到目前为止,这是我的测试:

@Test(expected = FileNotFoundException.class)
public void testExpectedException() {
    UserDataObject u = new UserDataObject("rob123", "Smith", "Robert", "Danny", 1);
    FlatFileStorage ffstorage = new FlatFileStorage();
    ffstorage.verifyUser(u, "dsfsdfsfdsdf.txt");

然而,测试似乎失败了!即使当我运行它时,错误消息实际上也会从控制台上的方法中打印出来,就像这样

dsfsdfsfdsdf.txt (The system cannot find the file specified)

我是否遗漏了一些非常明显的东西?

编辑** 这是我实际测试的方法

public void verifyUser(UserDataObject u, String filename) {

    String eachline = "";
    String uname = u.getUsername();
    Scanner sc;


    try {
        BufferedReader br = new BufferedReader(new FileReader(new File(filename)));

            StringBuilder sb = new StringBuilder();
            while ((eachline = br.readLine())!=null) 
            {
                if(eachline.indexOf("Username: " + uname)!=-1)
                {
                    int lineStart = eachline.indexOf("Username: " + uname);
                    int lineEnd = eachline.indexOf("end" + uname + ";");
                    int unameLength = uname.length();

                    String lineStatus = eachline.substring(lineStart, lineEnd + 4 + unameLength);
                    //System.out.println(lineStatus);

                    String newLineStatus = lineStatus.replace("VerifyStatus: 0", "VerifyStatus: 1");

                    sb.append(newLineStatus+"\n");

                }else{
                    sb.append(eachline+"\n");
                }
            } 
            br.close();
            BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filename)));
            PrintWriter out = new PrintWriter(bw);
            out.print(sb.toString());
            out.flush();
            out.close();
            } catch (FileNotFoundException e) {
                System.out.println("Error: Could not find database/storage.");
                System.out.println(e.getMessage()); 
                e.printStackTrace();
                } catch (IOException e) {
                    System.out.println("There has been an error: " + e.getMessage());
                    e.printStackTrace();
            }   

 }

最佳答案

您的测试失败是因为您期望 FileNotFoundException,但它实际上不是从方法中抛出的。为什么?由于 try/catch 包装器,它吞下了异常,仅将堆栈跟踪打印到输出。

将捕获 block 更改为

catch (FileNotFoundException e) {
            System.out.println("Error: Could not find database/storage.");
            System.out.println(e.getMessage()); 
            throw e;
            }

测试将通过

关于java - 为什么这个 Expect Exception Junit 测试不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043021/

相关文章:

java - 使用类字段中的 cron 表达式安排作业

Java - 获取已连接的 Android 设备的屏幕截图

function - 在 Haskell 中计算下一个素数

java - Mockito 测试类,在构造函数中创建依赖项

java - 在 eclipse 中运行 JUnit 测试用例时没有套接字可用错误

java - 在Eclipse中,使用另一种数据类型定义一种数据类型,只有后一个测试客户端main()运行,如何只运行第一个?

unit-testing - 将单元测试保存在 D 中的单独文件中

ruby-on-rails - 为什么这个简单的迷你测试失败了?

java - 在 Spring Junit 测试中,如何使用默认 rollback=true 测试级联操作

java - 如何删除外键关系中的所有子项