当前位置: 首页 > 面试题库 >

如何测试用Java写文件?

汤玉宸
2023-03-14
问题内容

我是新手,请放手。我有一些简单的程序,我需要对写方法进行junit测试。我在输入中有一些收藏。我该怎么做?这是我的代码:

// write to file
public void write(String fileName, 
        List<FigureGeneral> figuresList) {
    try {
        PrintWriter out = new PrintWriter(
                new File(fileName).getAbsoluteFile());
        try {
            for (int i = 0; i < figuresList.size(); i++) {
                out.println(figuresList.get(i).toString());
            }
        } finally {
            out.close();
        }
    } catch (IOException e) {
        System.out.println("Cannot write to file!");
    }
}

我想知道,因为我从文件中读取了之后,我们可以同时参加两个测试(写/读)还是更好地单独进行测试(如果我们的测试失败了,我们不知道问题出在哪里-
读或写)?如何在junit上正确进行此操作(准备进行测试,然后进行自我测试)?更好地在示例中显示,这样可以更好地理解。

谢谢,纳扎尔


问题答案:

我建议您为IO类(PrintWriter在您的情况下是该类)做一个接口包装,以便可以使用模拟对象进行输出。您不必测试Java
PrintWriter,就想测试功能,对吗?

所以你的课将是

class MyClass {

    MyWriter out;

    public void setOut(MyWriter out) {
        this.out = out;
    }

    // write to file
    public void write(String fileName, List<FigureGeneral> figuresList) {
        try {
            try {
                for (int i = 0; i < figuresList.size(); i++) {
                    out.println(figuresList.get(i).toString());
                }
            } finally {
                out.close();
            }
        } catch (IOException e) {
            System.out.println("Cannot write to file!");
        }
    }
}

MyWriter接口的签名非常简单。

interface MyWriter {

    void println(Object x); // You can add other println methods here.

    void close();

}

然后,您可以使用EasyMock编写测试。测试方法将类似于

@Test
public void testWrite() {
    MyWriter out = EasyMock.createMock(MyWriter.class);
    EasyMock.expect(mock.println(EasyMock.anyObject())).times(3);
    EasyMock.expect(mock.close()).times(1);

    List<FigureGeneral> list = ...
    list.add(...);
    list.add(...);
    list.add(...);

    replay(mock);

    MyClass myClass = new MyClass();
    myClass.setOut(out);
    myClass.write("mockFileName", list);

    verify(mock);
}


 类似资料:
  • 问题内容: 嗨,我创建了一个类ABC.java,并且有一个构造函数ABC()如下: 我正在传递Element.xml作为输入,我想测试该类,所以我创建了ABCTest类,对于以上代码,请告诉我如何为构造函数ABC()编写测试用例以及如何编写assert() 问题答案: 尽管Selenium本身就是一种测试工具,但对我来说听起来好像您想测试此类本身。就像用jUNit进行测试一样。 使用您刚刚提供的代

  • 问题内容: 我有一个Java课。如何进行 单元测试? 就我而言,我有课做一个二进制和。它需要两个数组,将它们求和,然后返回一个新的二进制数组。 问题答案: 使用正确的输入定义正常情况下的预期和期望输出。 现在,通过声明一个类来实现测试,将其命名为任何东西(通常是类似TestAddingModule之类的东西),并向其添加testAdd方法(即,类似于下面的方法): 编写一个方法,并在其上方添加@T

  • 问题内容: 假设您有一个外部进程将文件写入某个目录,并且有一个单独的进程定期尝试从该目录读取文件。要避免的问题是读取文件,表明其他进程当前正在写出该文件,因此该文件是不完整的。当前,读取的进程使用最小文件期限计时器检查,因此它将忽略所有文件,除非文件的最后修改日期早于XX秒。 我想知道是否有更干净的方法来解决此问题。如果文件类型未知(可能有多种不同的格式),是否存在某种可靠的方法来检查文件头以获取

  • 问题内容: 我正在GoLang中为一个简单的REST服务编写测试。但是,因为我使用julienschmidt / httprouter 作为路由库。我正在努力编写测试。 main.go 控制器 我的问题是:当GetBook既不是HttpHandler也不是HttpHandle时如何测试呢? 如果我使用传统的处理程序,这样的测试将很容易 问题是,httprouter不是处理程序,也不是handlef

  • 接口测试没有接口文档如何编写测试用例? 听说是可以通过抓包来确定请求参数和响应的预期结果,但是一直没理解的是,如果这个请求的参数和返回的响应结果是错误的(因为这个接口本来是需要测试的),测试用例又拿来做测试数据(即做请求数据和预期结果),这样的话不是白测试吗?还是说这个请求参数和返回的响应结果一定是正确的,为什么??? 希望知道的小伙伴解答一下,十分感谢!

  • 问题内容: 这是我使用的文件: component.xml ServiceImpl.java ServiceImplTest.java 错误: 问题答案: 确保已导入正确的程序包。如果我正确地记住,有两种不同的自动布线套件。应该 : 这对我来说也很奇怪: 这是一个适合我的示例: