Java 用于文件读取器的jUnit

Java 用于文件读取器的jUnit,java,unit-testing,junit,Java,Unit Testing,Junit,我得到了一个从txt文件读取并用文件中存在的单词填充列表的方法。 方法是计算并返回最重复的单词。 如果我想为此写一篇jUnit。鉴于文件经常更改,我应该如何测试该方法的核心性。该文件应该是该方法的参数或该方法类的实例字段。 通过这种方式,您可以通过提供一个文件对方法进行单元测试,您可以掌握该文件中的数据,并知道如何断言这些数据。 例如,使用参数方式: public String findMostRepeatedWork(File file){ ... } 因此,您可以轻松地将其

我得到了一个从txt文件读取并用文件中存在的单词填充列表的方法。 方法是计算并返回最重复的单词。
如果我想为此写一篇jUnit。鉴于文件经常更改,我应该如何测试该方法的核心性。

该文件应该是该方法的参数或该方法类的实例字段。
通过这种方式,您可以通过提供一个文件对方法进行单元测试,您可以掌握该文件中的数据,并知道如何断言这些数据。

例如,使用参数方式:

public String findMostRepeatedWork(File file){
    ...    
}
因此,您可以轻松地将其单位化:

@Test
public void findMostRepeatedWork(){
   // fixture
   File myTestFile = ...;
   // action
   new MyClassToTest.findMostRepeatedWork(myTestFile);
  // assertion
    ...
}

该文件应该是该方法的参数或该方法类的实例字段。
通过这种方式,您可以通过提供一个文件对方法进行单元测试,您可以掌握该文件中的数据,并知道如何断言这些数据。

例如,使用参数方式:

public String findMostRepeatedWork(File file){
    ...    
}
因此,您可以轻松地将其单位化:

@Test
public void findMostRepeatedWork(){
   // fixture
   File myTestFile = ...;
   // action
   new MyClassToTest.findMostRepeatedWork(myTestFile);
  // assertion
    ...
}

Junit不适用于任何获取资源(文件、数据库或网络)的测试。

Junit不适用于任何获取资源(文件、数据库或网络)的测试。

正如@jaibalaji所写,JUnitTests不应依赖于JVM内存之外的资源

因此,第一步必须是使被测代码(cut)独立于实际文件

我得到了一个从txt文件读取并用文件中存在的单词填充列表的方法。方法是计算并返回最重复的单词

在这句话中,你提到了3项责任:

  • 读取文件
  • 填充列表
  • 查找最重复的单词
  • 您应该拆分这个方法,这样您就可以创建更小的类,每个类只承担一个职责

    类文本分析器{ private final WordListBulder WordListBulder;//将字符串转换为单词列表 专用最终WordCountAnalyzer WordCountAnalyzer; 公共文本分析器(WordListBulder WordListBulder,WordCountAnalyzer WordCountAnalyzer){ this.wordListBulder=wordListBulder; this.WordCountAnalyzer=WordCountAnalyzer; }

    公共字符串findMostRepeatedWordIn(MyFileReader MyFileReader){
    字符串fileContent=myFileReader.readContent();
    List wordList=wordListBulder.createwordlistfrom(fileContent);
    返回WordCountAnalyzer.findMosterPreatedWordIn(单词列表);
    }
    
    这段代码太简单了,不需要进行单元测试,模块测试和/或验收测试将证明这是可行的


    现在,要测试的行为在类
    WordCountAnalyzer
    中,它有一个简单的t“假”输入,这将导致一个确定性的可测试输出。

    正如@jaibalaji所写,JuintTests不应该依赖于JVM内存之外的资源

    因此,第一步必须是使被测代码(cut)独立于实际文件

    我得到了一个从txt文件中读取并用文件中存在的单词填充列表的方法。该方法是计算并返回最重复的单词

    在这句话中,你提到了3项责任:

  • 读取文件
  • 填充列表
  • 查找最重复的单词
  • 您应该拆分这个方法,这样您就可以创建更小的类,每个类只承担一个职责

    类文本分析器{ private final WordListBulder WordListBulder;//将字符串转换为单词列表 专用最终WordCountAnalyzer WordCountAnalyzer; 公共文本分析器(WordListBulder WordListBulder,WordCountAnalyzer WordCountAnalyzer){ this.wordListBulder=wordListBulder; this.WordCountAnalyzer=WordCountAnalyzer; }

    公共字符串findMostRepeatedWordIn(MyFileReader MyFileReader){
    字符串fileContent=myFileReader.readContent();
    List wordList=wordListBulder.createwordlistfrom(fileContent);
    返回WordCountAnalyzer.findMosterPreatedWordIn(单词列表);
    }
    
    这段代码太简单了,不需要进行单元测试,模块测试和/或验收测试将证明这是可行的


    现在,要测试的行为在类
    WordCountAnalyzer
    中,它有一个简单的t“fake”导致确定性可测试输出的输入。

    要进行测试,您可能知道重复次数最多的单词出现的次数,如果不能,那么如果文件更改,则很难进行测试。^^^
    BufferedReader
    InputStream
    应该是类依赖项,这样我们就可以创建该接口的模拟,而不需要接触文件系统……我编写了返回最多重复单词的方法。我怎么知道我一开始就写对了呢?@MaorShitrit除非为每个和e编写了UnitTest,否则不会实际代码之前的预期行为(TDD)它应该更进一步:
    BufferedReader
    InputStream
    应该是类依赖项,这样我们就可以创建该接口的模拟,而不需要接触文件系统……我编写了返回大多数重复字的方法。我怎么知道我一开始就写对了?@MaorShitrit除非你注意在实际代码(TDD)之前对每个预期行为进行单元测试