我有一个简单的测试用例:
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()
的测试失败了。我不明白的两件事:
我不明白,它在testGetFiles()
失败了为什么我仍然可以看到打印testPersistFiles()
听起来就像失败一样,它不会停止运行,但会继续运行下一个测试testPersistFiles()
?在JUnit测试用例中幕后发生了什么?
我不明白的另一件事是testGetFiles()
失败的原因?我可以看到persistFiles()
已保留文件的日志。为什么之后它变为空?
答案 0 :(得分:1)
我不明白,它在testGetFiles()失败了为什么我仍然可以看到打印testPersistFiles()听起来就像是失败了,我
这就是单元测试的工作原理。每个测试应该是隔离的,只使用其数据集。单元测试框架运行每个测试,以便您可以看到系统的哪些部分工作,哪些部分不工作,它们不会在第一次故障时停止。
答案 1 :(得分:0)
mFileManager.getFilesAtPath(dirPath);
您没有在正确的位置搜索文件
String dirPath = “/myDir/”
你确定这条路是好的吗?目录名前有斜杠?
答案 2 :(得分:0)
对于每个测试,JUnit都会创建该类的单独实例并运行它。由于您似乎有3个测试,JUnit将创建3个类的实例,在每个实例上执行@Before以初始化状态,然后运行它们。 它们运行的顺序通常是编写测试的顺序,但这不能保证。
现在关于print语句 - 您会看到它是您测试中的第一个语句,因此它将被执行。然后是mFileManager.persistFiles();被执行。由于某种原因,它返回false,因此测试失败。
至于为什么它返回false,你可以运行一个本地调试器,在该方法的开头设置一个断点,单步并查看。