如何测试这堂课?

时间:2019-04-15 06:45:04

标签: java testing junit

我需要知道如何测试此类?我应该测试Bufferedreader何时返回非空值?还是测试队列何时为空?

public class DataFromTxtFile {

    private Queue<String> myLines;

    public DataFromTxtFile(){
        this.myLines = new ArrayDeque<>();
    }

    public void readDataFromFile(File file) throws IOException {
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                myLines.offer(line);
            }
        }
    }

    public String getLine() {
        if(myLines.size() == 0) return "";
        return myLines.poll();
    }

public boolean isFileNullOrEmpty(File file){
        if(file == null || file.length()==0){
            return true;
        }
        return false;
    }
}

好的,这是我创建的3个示例测试。这是为此方法创建单元测试的好方法吗?目前,即时通讯正在尝试测试我的其他方法。你能给我建议吗?

public class DataFromTxtFileTest {

    private DataFromTxtFile dataFromTxtFile;
    private ClassLoader classLoader = getClass().getClassLoader();
    private File file = new File(classLoader.getResource("example.txt").getFile());

    @Rule
    public TemporaryFolder temporaryFolder = new TemporaryFolder();

    @Before
    public void setUp(){
        dataFromTxtFile = new DataFromTxtFile();
    }

    @Test
    public void isFileNull(){
        File file = null;
        assertTrue(dataFromTxtFile.isFileNullOrEmpty(file));
    }

    @Test
    public void isFileEmpty() throws IOException {
        File file = temporaryFolder.newFile("testFile.txt");
        assertTrue(dataFromTxtFile.isFileNullOrEmpty(file));
    }

    @Test
    public void isCorrectFile() throws IOException {
        assertFalse(dataFromTxtFile.isFileNullOrEmpty(file));
    }
}

1 个答案:

答案 0 :(得分:0)

通常,您应该考虑所有可能的测试用例。 由于文件是您唯一的输入,因此您应该使用输入的所有可能变化来测试这两种方法,以获取所有想要的结果(包括异常)。

  • 空输入
  • 空文件
  • 正确的文件
  • 带有特殊字符的文件
  • 不同的编码

对于每个输入,应该有一个输出。 这是一个非常简单的示例,通过对junit的一些研究,您应该能够自行实现测试用例。您可能想要发布测试方法以获取更多问题。 这是一篇小文章,可能会让您入门: https://www.vogella.com/tutorials/JUnit/article.html 但这还不是很深。

请记住,您可以测试方法注释之类的异常是否发生

@Test(expected = IOException.class)