JUnit测试用例失败

时间:2015-11-05 13:30:27

标签: java junit junit4

我有一个简单的测试用例:

public class FileManagerTest {
  String dirPath = “/myDir/”
  @Before
  public void setUp() {
     mFileManager = MyFileManager.getInstance();
  }

  @Test
  private void testPersistFiles() {
      System.out.println(“testPersistFiles()…”);

      //it deletes old files & persists new files to /myDir/ directory
      boolean successful =mFileManager.persistFiles();

      Assert.assertTrue(successful);
  }

  @Test
  public void testGetFiles() {
     System.out.println(“testGetFiles()…”);

     mFileManager.persistFiles();
     //I double checked, the persistFiles() works, the files are persisted.

     List<File> files = mFileManager.getFilesAtPath(dirPath);
     Assert.assertNotNull(files); //Failure here!!!!
  }

  @Test
  public void testGetFilesMap() {
     System.out.println(“testGetFilesMap()…”);

     mFileManager.persistFiles();

     Map<String, File> filesMap = mFileManager.getFilesMapAtPath(dirPath);
     Assert.assertNotNull(files);
  }
}

persistFiles()中的FileManager函数删除/ myDir /下的所有文件,然后再次保留文件。

如上所述,我在每个测试函数中都有一个System.out.println(…)。当我运行它时,我可以按以下顺序看到所有打印件:

testGetFilesMap()…
testGetFiles()…
testPersistFiles()…

但是,testGetFiles()的测试失败了。我不明白的两件事:

  1. 我不明白,它在testGetFiles()失败了为什么我仍然可以看到打印testPersistFiles()听起来就像失败一样,它不会停止运行,但会继续运行下一个测试testPersistFiles()?在JUnit测试用例中幕后发生了什么?

  2. 我不明白的另一件事是testGetFiles()失败的原因?我可以看到persistFiles()已保留文件的日志。为什么之后它变为空?

3 个答案:

答案 0 :(得分:1)

  

我不明白,它在testGetFiles()失败了为什么我仍然可以看到打印testPersistFiles()听起来就像是失败了,我

这就是单元测试的工作原理。每个测试应该是隔离的,只使用其数据集。单元测试框架运行每个测试,以便您可以看到系统的哪些部分工作,哪些部分不工作,它们不会在第一次故障时停止。

答案 1 :(得分:0)

mFileManager.getFilesAtPath(dirPath);

您没有在正确的位置搜索文件

String dirPath = “/myDir/”

你确定这条路是好的吗?目录名前有斜杠?

答案 2 :(得分:0)

对于每个测试,JUnit都会创建该类的单独实例并运行它。由于您似乎有3个测试,JUnit将创建3个类的实例,在每个实例上执行@Before以初始化状态,然后运行它们。 它们运行的​​顺序通常是编写测试的顺序,但这不能保证。

现在关于print语句 - 您会看到它是您测试中的第一个语句,因此它将被执行。然后是mFileManager.persistFiles();被执行。由于某种原因,它返回false,因此测试失败。

至于为什么它返回false,你可以运行一个本地调试器,在该方法的开头设置一个断点,单步并查看。