如何轻松测试代码?

Edu*_*con 5 java testing unit-testing code-testing

我正在通过阅读"Head First Java"并完成所有的谜题和例证来学习Java.在书中他们建议编写TestDrive类来测试我编写的代码和clases,这是一个非常简单的事情,但是通过这样做我认为我无法完全测试我的代码,因为我正在编写测试代码知道我想得到什么,我不知道它是否有任何意义,但我想知道是否有任何方式以一种简单的方式测试我的代码,它告诉我什么是不正常的.谢谢.

djn*_*jna 2

我们所说的代码是什么意思?当单元测试时,我认为我们在这里讨论的是,我们正在测试特定的方法和类。

我认为我无法完全测试我的代码,因为我在编写测试代码时知道我想要得到什么

换句话说,您正在调查某些代码是否履行合同。考虑这个例子:

 int getInvestvalue( int depositCents, double annualInterestRate, int years) {

 }
Run Code Online (Sandbox Code Playgroud)

你可以设计什么测试?如果您设计了一套良好的测试,您就可以对这个例程有一定的信心。所以我们可以尝试这些类型的输入:

  deposit 100, rate 5.0, years 1 : expected answer 105
  deposit 100, rate 0, years 1 : expected answer 100
  deposit 100, rate 10, years 0 : expected anwer 100
Run Code Online (Sandbox Code Playgroud)

还有什么?负利率怎么样?

更有趣的是,像 1,000,000.50 和 100,000 年这样非常高的利率怎么样,结果会发生什么,它是否适合整数 - 设计这个测试的问题在于它挑战了接口 - 为什么没有记录异常?

那么问题来了:我们如何找出这些测试用例。我认为没有单一的方法可以构建一套全面的方法,但这里有一些需要考虑的事情:

  1. 边:零、一、二、多。在我的示例中,我们不只是采用 5% 的税率。我们特别考虑特殊情况。零是特殊的,一是特殊的,负数是特殊的,大数是特殊的......
  2. 边角情况:边的组合。在我的例子中,这是一个很大的速率和很大的年数。选择这些是一门艺术,并且我们对实施的了解有所帮助:在这里我们知道利率和年份之间存在“乘数”效应。
  3. 白盒:利用实现知识来驱动代码覆盖率。调整输入以强制代码沿着特定路径运行。例如,如果您知道代码有一个“如果负率”条件路径,那么这是包含负率测试的线索。