JUnit的集成测试

时间:2011-06-06 20:19:31

标签: java junit tdd integration-testing

我对TDD很新,所以如果我的问题没有多大意义,请原谅我。

看了一下之后,似乎jUnit能够实现集成测试。我希望社区可以为我提供一些如何编写集成测试的指导。这是我设计的简单概述。

我有Main1,接受一个zip文件列表。 Main将解压缩zip文件,编辑zip文件中pdf的内容,并将最终的pdf文件放入文件夹X。如果pdf的数量达到THRESHOLD,那么Main2Processor(不是主类)将被调用并压缩所有pdf文件,并创建一个与新创建的文件同名的报告文本文件zip文件。

如果我运行Main2,它也将启动Main2Processor,这将压缩pdf文件并创建文本文件报告(即使文件夹X中的pdf数量不是达到THRESHOLD)。

如何编写集成测试测试以上设计的正确性?

4 个答案:

答案 0 :(得分:2)

你是对的; JUnit可用于编写称为集成测试的测试。您所要做的就是放宽关于不接触外部资源的测试的规则。

首先,我会重构你的应用程序的main(),尽可能少地做它;没有一种非常好的方法来测试main()函数中的代码。让它构造并运行一个对象(该对象可以是包含main()的对象,如果您愿意的话),将该新对象传递给您的ZIP文件列表。现在可以通过实例化它来使用JUnit测试该对象。

现在,您只需构建测试以设置一个恒定的测试环境,然后执行可重复的测试。在某处创建或清除临时目录,然后将一些测试ZIP文件复制到该目录中。然后,运行主处理器。

要检测达到阈值时是否发生了正确的行为,您只需测试是否存在zip文件(和/或如果未达到阈值则不存在)。

答案 1 :(得分:2)

你真的想要一个“整合测试”(这个术语现在超出理解范围,所以如果你能说明你的最终目标有帮助吗?)?接受测试如何使用此控制台/ GUI应用程序,如具有特定输入的真实用户并检查预期输出?

JUnit只是一个测试运行者,并且不知道测试实际上做了什么。所以是的,你可以用它来编写任何测试。然而,它是为单元测试而构建的,有时会泄漏。测试关闭第一个错误/第一个不成功的断言的事实。通常粗略的测试就是推进并最终得到一堆错误。

如果您想进行集成测试 - 您必须重新设计您的应用程序才能从测试中调用(如果不是这样)。提出编写此测试的具体障碍,我可以提供更具体的建议。

答案 2 :(得分:1)

我认为你应该为你的测试创建一些实用方法。例如运行应用程序,检查目录,清除目录等。

然后您将能够实施如下测试:

@Test
public mytest1() {
    exec(Main1.class, "f1.zip", "f2.zip");
    Assert.assertTrue(getFileCount(OUTPUT_DIR) < THRESHOLD);
    // perform verification of your files etc...
}

答案 3 :(得分:1)

首先,您可以描述您的上述规范,但是从“测试序列”的角度来看。例如,测试一个将向Main1提供一组N个pdf文件,N低于阈值。然后,在Main1返回后,您的测试代码将检查X文件夹内容以及报告,以验证您的期望是否得到满足。

JUnit本身只是帮助运行测试用例,它并没有真正帮助编写测试。 JUnit是面向“单元测试”的(但你可以将它用于集成测试,尽管有些情况不适合;例如,当需要全局设置时,或者预期测试用例在特定的情况下运行时为了...)。

一些额外的库可以帮助您轻松地与其余代码进行交互:dbunit,httpunit等。