从哪里开始编写单元测试

时间:2013-10-10 20:41:48

标签: java unit-testing

我的老板在工作时决定为我已经工作了一段时间的Java程序编写单元测试是个好主意。该程序是你相当典型的混乱,但它并不大。我之前从未使用或编写过任何单元测试,而且从我读过的所有内容开始,预先存在的项目并不是最好的开始。我真的没有选择,所以我有一些问题。

我的主要问题是:我已经阅读了很多关于单元测试应该做什么,它们的范围应该是什么,如何在TDD过程中编写生产代码等等的事情。我还没有找到任何谈话的人关于代码实际应该去哪里。我是否在生产代码类中编写测试?我是否将所有这些文件放在一个单独的.java文件(或文件)中?我把它们放在项目中自己的目录中吗?如果我使用后面的任何一个选项,我将如何访问私有对象和方法来测试它们?我觉得这应该是一个相当明显的问题,但我只是不知道。

还有一个次要问题:我已经看到很多令人信服的使用TDD的论据,我想在我的个人项目中尝试一下。无论我的第一个问题的答案是否适用于开始全新的项目?或者,对于预先存在的项目而不是新项目,我是否会以不同的方式实施单元测试?

5 个答案:

答案 0 :(得分:3)

测试不在生产代码中,您可以将它们放在单独的子目录中。如果您了解Maven,该项目会强制执行标准目录结构,因此您的生产代码位于src / main / java下,您的属性文件位于src / main / resources中,而测试位于src / test / java下和java代码使用的文件在src / test / resources下。 Maven确保src / test中的任何内容都没有找到它构建的工件。 (使用蚂蚁的本土构建通常会遇到问题,因为你必须实际考虑事情的发展方向并努力使测试和代码保持分离,否则一切都会被抛在一起。)

即使你不能使用maven,也值得复制目录结构,只是为了遵循一个共同商定的模型。

您应该能够通过在测试中实例化并调用其方法来测试对象。如果您在没有测试的情况下编写了大量代码,那么您可能会以难以测试的方式编写代码,例如使用单例代码。您可能需要重新编写一些现有代码,以使其更易于测试。

答案 1 :(得分:2)

我会从你的错误开始。当您修复错误时,请编写一个显示错误的测试。当您修复错误时,您的测试应该通过。顺便说一下,你的测试中有一半的错误。

当你编写那些如此微不足道的测试时,他们不会失败,但他们确实会看到测试的价值。在用户看到之前,如果更容易修复,就会发现各种各样的问题。

答案 2 :(得分:0)

如果您以前从未使用过TDD,那么您会发现本教程非常有用:

Junit Tutorial

答案 3 :(得分:0)

开始测试项目永远不会太晚,你不应该担心它。

你需要学习java的TestNG或JUnit 4。

您应该在单独的目录中为测试创建单独的java文件。您的测试类名称应以Test结尾,例如: 对于MyClass.java主代码,您编写了一个MyClassTest.java测试类。

对于您提出的其他问题,请访问:What is unit testing and how do you do it?

答案 4 :(得分:0)

在没有测试的情况下将测试添加到现有遗留代码的方法是将它们添加到您更改的任何部分。

即使您认为如果没有良好的单元测试覆盖率,程序也无法继续进行,您将会执行类似这样的操作,因为它从0%覆盖范围变为更高的数字。请记住,具有1个测试的系统有更多的测试,系统没有测试!

您将遇到的主要问题是程序各部分之间的现有接口将不适合测试。通常这是紧耦合,需要建立几乎所有子系统,然后才能进行简单的隔离测试。

一个很好的解决方法是使用模拟来模拟难以分离的部分的依赖性