2

我正在尝试使用 TDD 开发我的第一个项目。在这种情况下,我必须在我的应用程序代码之前编写测试用例。在我的测试用例中,我有一些模拟对象。我想知道模拟对象的期望是否也必须在代码创建之前编写。如果是真的,我怎样才能实现这个目标?我怎么能想象在我编写真正的代码之前必须调用的方法?(我将 Java 与 JUnit 和 Jmock 一起使用)

4

3 回答 3

3

这正是 TDD 的工作原理。您根据您的规范编写测试:您希望被测类对其依赖项(模拟对象)做什么。编写时,通过在要模拟的接口上添加方法来使其编译(默认实现不返回任何内容)。然后你可以让你的单元测试(使用模拟)通过。当您的所有测试都通过时,您可以继续为依赖项添加单元测试,这将反过来驱动您在上述步骤中编写的空方法的实现。

它将确保您对所有具体类都有 100% 的覆盖率。

于 2013-10-30T09:32:53.233 回答
2

这就是为什么 TDD 首先是一种设计方法。通过测试,您正在设计您的应用程序。您正在创建良好的 API,然后通过编写满足您的设计(即满足要求)的代码来实现此 API。

当您从测试开始时,它可以帮助您理解代码的需求并以断言的形式写下这些需求(顺便说一句,其他人可以实现这些需求)。你不会从一开始就创造出最好的设计。但是你的设计会在重构过程中进化——你会重命名方法和类,你会提取一些代码。这将需要更改测试 - 您将需要模拟提取的依赖项。但是您的代码将随时满足要求,因为断言将保持不变。

于 2013-10-30T09:22:29.233 回答
0

我想知道模拟对象的期望是否也必须在代码创建之前编写

您可以创建一个什么都不做的方法,然后模拟结果。

我怎么能想象在编写真正的代码之前必须调用的方法?

你怎么能在不知道它必须做什么的情况下编写代码?只需从空方法开始...

于 2013-10-30T09:20:39.243 回答