我想在我正在开发的一个小项目上实现JUnit,因为我想了解一点。如何比较JUnit测试用例中的文件?
我阅读的教程都引用了具有特定输出的方法。
在我的情况下,我的输出是文件,我该怎么做?任何简单的例子? 任何可以帮助我的方法?
这些文件是通过void私有方法构建的原始文本文件。
我想在我正在开发的一个小项目上实现JUnit,因为我想了解一点。如何比较JUnit测试用例中的文件?
我阅读的教程都引用了具有特定输出的方法。
在我的情况下,我的输出是文件,我该怎么做?任何简单的例子? 任何可以帮助我的方法?
这些文件是通过void私有方法构建的原始文本文件。
你想获得一个给定的输入,并设置一个测试打电话给你空白法这些输入正确的输出文件,然后比较反对什么你的方法产生已验证的输出文件。你需要确保你有一些方法来指定你的方法输出到哪里,否则你的测试会非常脆弱。
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void testXYZ() {
final File expected = new File("xyz.txt");
final File output = folder.newFile("xyz.txt");
TestClass.xyz(output);
Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output));
}
使用Commons-io的FileUtils的舒适文本文件比较& JUnit的TemporaryFolder,以确保输出文件从未存在试运行之前。
在您的方法写入文件后,在单元测试中,您可以读取该文件并验证它是否正确写入。
另一件有意义的事情是将您的方法拆分成一个检索该数据并将其返回给仅将其写入文件的方法的方法。然后你可以验证第一个方法返回的数据是否正确。
而另一种合理的方法是将OutputStream
传递给写入数据的方法。在“实际代码”中,您可以通过FileOutputStream
/FileWriter
,而在测试代码中,您可以编写OutputStream
的模拟实现并检查正在写入的内容。
如果您无法控制将输出放入流中的方法,那么我会说您需要重构代码,以便该方法在参数(或其类的构造函数)中接收流, 。
之后,测试很容易 - 您可以检查流。易于测试的代码通常等同于优秀的代码。
问题是,实际上它不会生成一个单独的文件,它会根据不同的事情制作3到5个文件。但是因为我真的很喜欢junit,所以我想先用一个单独的文件尝试一下,以便完全理解它。谢谢= D。 – Saikios 2010-09-15 08:20:55
@Saikios这是任何数量的文件:) – 2010-09-15 08:55:52
使用junitx.framework.FileAssert
类别从junit-addons project。其他链接:
方法之一:
assertEquals(java.lang.String message,
java.io.Reader expected,
java.io.Reader actual)
** protected ** static void assertEquals(java.lang.String message,java.io.Reader expected,java.io.Reader actual) – user482745 2015-10-23 07:55:53
怎样的方法写入文件?如果他们得到一个流,你可以给他们自己的,而不是一个指向一个文件,然后比较它。 – 2010-09-15 08:08:49
whith基本写入缓冲区字符串在一个网络爬虫(我按回车但它写了消息)代码是这样的:txtUrlSpecial.write(bigText.charAt(j)); – Saikios 2010-09-15 08:12:45