0

我有一个 Java 程序,它读取包含数字列表的文件的内容,挑选出重复的数字并将它们写入控制台。无法确定将它们放在哪里或它们应该是什么样子。导入 java.util。; 导入 java.io。;

public class ReadAFile {

public static void main(String[] args) {

    String list[] = new String[];

        FileInputStream fstream=new FileInputStream("C:/Users/Kevin/Desktop/testfile.txt");
    // Use DataInputStream to read binary NOT text.
        BufferedReader br=new BufferedReader(new InputStreamReader(fstream));

        String str,str1;
        int i=0;
        while((str=br.readLine())!=null){
            i++;
            str1=Integer.toString(i);
            if(lines.containsValue(str)){
                System.out.println(str);
        }
        in.close();

}
}
4

6 回答 6

2

您需要考虑一个测试用例,编写一个测试类,并将其放在 /src/test/java 目录下。然后你需要在测试类中编写一些方法(测试用例的单独方法是常用的方法),用@Test注释注释该方法并运行maven

于 2013-10-16T12:01:13.103 回答
1

非常简单的教程来自 mkyong,当我开始进行单元测试时,它对我来说非常有效。对输入输出操作的一些模拟也会很方便。

于 2013-10-16T12:10:47.280 回答
1

您可以在此处查看本教程!它非常详尽地提供了有关如何在 Eclipse 中运行单元测试和使用 EasyMock 的详细信息。

于 2013-10-16T12:00:35.493 回答
1

maven 项目中的单元测试通常位于单独的源文件夹 /source/test/java 中。Maven 自动执行在此位置找到的所有测试。

要测试您的类,您必须对其进行重构,以便您可以将输入文件的路径设置为您可以放置​​在 /source/test/resources 中的测试文件。至少如果您想编写一个验证输入文件读取的集成测试。

识别和打印重复条目的处理逻辑可以通过“真实”单元测试进行测试,该单元测试以某种方式模拟 BufferedReader 并提供一些测试数据而不从文件中读取它。这里 easymock 可能是您可以使用的一个库。

为了简化您的类的测试,您可以将所有逻辑放在一个非静态方法中,并通过创建类本身的实例从您的 main 方法中调用它。

public class ReadAFile {
  public static void main(String[] args) {
    ReadAFile instance = new ReadAFile();
    instance.readAFile(args[0]);
  }

  public void readAFile(String fileToRead) {
    HashMap<String,String> lines=new HashMap<String,String>();
    ...
  }
}
于 2013-10-16T12:01:12.483 回答
1

第一步是按单元组织代码,以便可以测试每个单元。在 Java 世界中,这个单元将是您的类中的一个方法。所以第一步,用'main'以外的方法编写你的代码。

接下来,您编写一个程序来测试您编写的方法。这种程序的基本结构是

1) 执行运行被测方法所需的任何操作。2) 运行方法 3) 观察输出以验证它是否产生了正确的结果。

JUnit 是一个 Java 库,它通过提供一些预先设定的方法让您可以轻松编写此类测试。

你现在有了基础,休息,正如他们所说,可以用谷歌搜索。

于 2013-10-16T12:08:21.757 回答
0

由于您已经在项目中包含了 junit,因此您必须考虑以下结构以进行单元测试。

在此处输入图像描述

对于要测试的每个类,您将拥有一个相关的类来测试它,MathTest单元测试Math类也是如此

然后,假设您将代码修改为具有 2 种方法,一种用于读取文件,一种用于解析 InputStream,另一种用于显示结果。

这是我将使用的接口,但只是为了了解方法声明。

public interface MyCodeToBeTested {

    List<String> parseFile(final String path);

    void processLines(List<String>);
}

想象一下,您使用一个名为ImplementedClass.

所以你可以有一个 Junit 类来测试每个寻找失败的方法。

import junit.framework.Assert;
import org.junit.Test;

public class Tester {

    @Test
    public void testReadFile() {
        ImplementedClass myclass = new ImplementedClass();
        List<String> lines = myclass.parseFile("mytestfile1.txt");
        Assert.assertEquals(3, lines.size());
        Assert.assertEquals("this is the first line of the file", lines.get(0));
    }

}

通过此测试,您可以检查解析文件是否正常工作,一旦您通过单元测试对读取的文件有信心,您可以转移到测试 processLines 方法而无需处理文件。

    @Test
    public void testProcess() {
        ImplementedClass myclass = new ImplementedClass();
        List<String> lines = initializeLines();//initialize your lines
        myclass.processLines(lines);
        //Assert here myclass results
    }
于 2013-10-16T12:22:04.967 回答