行为驱动开发 (BDD)

17 Mar 2025 | 阅读 2 分钟

行为驱动开发是一种敏捷软件开发过程,它支持软件项目中开发人员、质量分析师和业务成员之间的协作。它是从测试驱动开发 (TDD) 软件发展而来的。

BDD 是 TDD 的通用技术和原则与源自领域驱动设计 (DDD) 以及面向对象的分析和设计 (OOAD) 方法的思想的结合。

Mockito 使用 org.mockito 包中提供的 BDDMockito 类。它以 BDD 风格开发测试。编写文本的 BDD 风格使用 //given //when //then 注释作为测试主体的主要部分。 它使用 given(..)willReturn(..) 方法代替 when(..)thenReturn(..) 方法。

以下是 BDDMockito 类的一些重要方法

方法和方法类型描述
<T> given(T methodCall)它与 when(TmethodCall) 方法非常相似。它启用存根。
<T> then(T mock)它启用模拟行为的 BDD 风格验证。
BDDStubber will(Answer<?> answer)它类似于 doAnswer(Answer answer) 方法。 当我们想用泛型 Answer 存根一个 void 方法时,会用到它。
BDDStubber willReturn(Object toBeReturned)它类似于 doReturn(Object toBeReturned) 方法。 它用于代替 when(Object)。
BDDStubber willThrow(Class<? extends Throwable> toBeThrown)它类似于 doThrow(Class<? extends Throwable> toBeThrown) 方法。 当我们想用异常存根一个 void 方法时,会用到它。

以下代码片段显示了如何使用 BDD 风格的测试

在上面的代码片段中,我们使用了 assertThat() 方法而不是 assertEquals() 方法。 如果通过静态导入引用它们,它可以使代码更具可读性和可理解性。

BDD 风格示例

在这里,我们将创建一个 BDD 风格测试的示例。 切换到 BDD 风格只会使测试语法略有不同。 它将测试语法分为三个部分:given、whenthen,这使得代码更具可读性。

  • Given: 我们可以使用设置部分和给定的语法类型。
  • When: 我们可以执行测试的实际调用。
  • Then: 我们可以使用可读的 asserts,例如 assertThat(),并且还可以检查是否满足后置条件。

让我们通过创建一个示例来理解 BBD 风格的测试。

TestList.java

输出

以下输出显示了使用 BDD 风格成功运行测试。

Behavior-driven development
下一个主题ArgumentCaptor