OpenDSA 完整目录

Chapter 4 Programming Tutorials

| 关于   «  8. Java 中的随机访问文件   ::   目录   ::   10. 编写 JUnit 测试(Writing JUnit Tests)  »

9. JUnit 测试与你(JUnit Testing And You)

9.1. 开始学习(Getting Started)

犯错乃人之常情,纠错近乎神圣。

编写代码时我们常常会犯错。 因此,频繁并持续地测试我们的代码是很重要的, 以便帮助发现、修复并消除 bug。 幸运的是,Java 自带一套出色的工具来帮助测试 代码。 除此之外,各方还开发和发布标准 JUnit 套件的扩展 供学生使用。 其中一个例子就是 此处。

9.1.1. 设计考虑(Design Considerations)

测试代码有几种不同的方法。其中一种是关注代码覆盖率。基于代码覆盖率的测试方法相当容易理解。如果我们的测试用例覆盖了每一行代码并产生了预期结果,那么我们就有很好的迹象表明我们的代码相对没有错误。对于这种设计,我们应该尽量保持测试用例的模块化。因此,通常建议为类中的每个方法设计一个对应的测试方法。考虑一个 Human 类,它包含 setName, getName, setWeight, getWeight, walk, jump 方法。这里有两组 getter 和 setter 以及两个独立的方法。因此,明智的做法是创建一个名为 testName() 的测试方法来测试 name 的 getter/setter,并创建一个名为 testWeight() 的测试方法来测试 weight 的 getter/setter。在测试这些方法时,程序员可能需要考虑的一些事项包括:当将数据类型强制转换以适配 setter 时会发生什么(即,如果您的 weight 用整数表示,系统是否会按预期进行舍入,或者您是否应该调整数据选择)。此外,请务必考虑滥用 setter 可能引发的任何问题(即,负的 weight,或者为 name 提供 NULL)。在测试代码时,请尝试考虑任何可能破坏程序的方式。最后,我们还有两个未测试的方法: walk 和 jump 方法。为了保持它们的模块化,只需创建两个单独的测试方法: testJump 和 testWalk 。

9.1.2. 有意义测试(Meaningful Tests)

在编写测试用例时,重要的不是仅仅用随机测试来运行代码。 所有测试都应该被设计为既能测试常见的运行时条件, 也能测试那些可能改变行为的边界条件。此外, 尽量开发相互独立的测试用例。如果一段 代码已经得到了适当的测试,反复测试相同的代码块 不会增加任何价值,反而会减慢测试的整体运行速度。 记住,质量胜过数量!

9.1.3. 更多信息(More Information)

如需更多信息,这篇博客 是一个阅读和学习的绝佳资源。

   «  8. Java 中的随机访问文件   ::   目录   ::   10. 编写 JUnit 测试(Writing JUnit Tests)  »

关闭窗口