测试驱动开发 - 模拟对象

时间:2013-10-30 09:14:50

标签: unit-testing mocking tdd

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

3 个答案:

答案 0 :(得分:3)

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

它将确保您对所有具体课程的覆盖率达到100%。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

  

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

您可以创建一个不执行任何操作的方法,然后模拟结果。

  

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

如何在不知道必须执行的操作的情况下编写代码?从空方法开始......