0

我被分配了一个只有方法头和签名,没有正文的类的作业。

其中一个要求是我通过为每种方法编写 Junit 测试来使用测试驱动开发过程。

根据我对 TDD 方面单元测试的理解,您首先要编写 FAIL 的测试,然后实现通过测试的代码。

但是,这是否意味着一旦您创建了失败的测试,您就不会再次修改这些测试,而只修改代码以使测试通过?

我问这个是因为如果我编写一个导致编译错误的测试会发生什么?

例如,在代码中,有一个构造函数,它有3个参数,主体为空,即没有初始化变量。

我想为包含不同数据类型的构造函数编写一个测试,然后在参数中使其失败。但这会导致编译错误,所以当我实现代码并初始化变量时,由于数据类型不正确,测试仍然会失败。

在这种情况下,JUnit 测试在 TDD 方面如何工作?

谢谢!

4

2 回答 2

1

我是 TDD 的大力支持者,但我相信编写一个不编译的测试并没有提供太多价值。

我做TDD的方式如下:

  1. 定义所需的方法签名
  2. 编写一个调用被测方法的编译测试方法
  3. 断言被测方法的功能
    1. 这应该会失败,因为该方法没有任何功能
  4. 运行测试并验证它是否按预期失败
  5. 实现代码以满足验证
  6. 运行测试并验证它通过

接下来,您可以向同一个测试添加额外的验证,或者针对同一个方法或下一个方法编写一个新测试。

在单元测试中,你可以在一个测试中验证不止一件事,但你不应该多次调用被测方法。IE。如果被测方法执行 5 个可验证的操作,您可以验证同一测试中的所有操作,前提是您可以在不多次调用该方法的情况下这样做。

于 2013-11-01T10:25:25.350 回答
0

测试应该测试代码的功能。例如,Calculator.sum(a,b) 计算总和。它不应该测试 Java 语言(例如构造函数匹配,方法存在,...)

于 2013-11-01T08:04:58.853 回答