如何在Junit中处理测试数据?

在TDD(测试驱动开发)开发过程中,如何处理测试数据? 假设一个场景,解析一个日志文件以获取所需的列。 对于强大的测试,我如何准备测试数据? 我是否正确地将这些文件放在测试类文件中?

例如,Maven使用一种用于处理测试数据的文件夹结构的约定:

src main java <-- java source files of main application resources <-- resource files for application (logger config, etc) test java <-- test suites and classes resources <-- additional resources for testing 

如果你使用maven进行构建,你会想要将测试资源放在正确的文件夹中,如果你的建筑有不同的东西,你可能想要使用这个结构,因为它不仅仅是一个maven约定,我认为它很接近'最佳实践'。

另一种选择是模拟您的数据,消除对外部源的依赖。 这样,无需多个外部测试数据实例即可轻松测试各种数据条件。 然后,我通常使用完整的集成测试进行轻量级烟雾测试。

在测试中对它们进行硬编码,使它们接近使用它们的测试,使测试更具可读性。

从真实的日志文件创建测试数据。 写下要写的测试列表,逐个处理,一旦通过就打勾。

 getClass().getClassLoader().getResourceAsStream("....xml"); 

测试里面为我工作。 但

 getClass().getResourceAsStream("....xml"); 

没用。 不知道为什么,但也许它可以帮助其他人。

当我的测试数据必须是外部文件时 – 我试图避免的情况,但不能总是 – 我将它放入与我的项目相同级别的保留测试数据目录中,并使用getClass().getClassLoader().getResourceAsStream(path)来读取它。 test-data目录不是必需的,只是方便。 但尽量避免需要这样做; 正如@philippe指出的那样,在测试中对值进行硬编码几乎总是更好,就在你可以看到它们的地方。