行为驱动的开发是一种敏捷的软件开发过程, 它支持软件项目中的开发人员, 质量分析师和业务成员之间的协作。它是从测试驱动开发(TDD)软件开发的。
BDD是TDD的一般技术和原理与源自域驱动设计(DDD)和面向对象的分析与设计(OOAD)方法的思想的结合。
Mockito使用org.mockito包中提供的BDDMockito类。它开发了BDD风格的测试。 BDD编写文本的样式////然后将注释作为测试正文的主要部分。它使用给定(..)willReturn(..)方法代替when(..)thenReturn(..)方法。
以下是BDDMockito类的一些重要方法:
方法和方法类型 | 描述 |
---|---|
<T>给定(T methodCall) | 它与when(TmethodCall)方法非常相似。它启用存根。 |
<T>然后(T模拟) | 它启用了模拟行为的BDD样式验证。 |
BDDStubber将(回答<?>回答) | 它类似于doAnswer(Answer answer)方法。当我们想使用通用Answer来对void方法进行存根时, 可以使用它。 |
BDDStubber willReturn(Object toBeReturned) | 它类似于doReturn(Object toBeReturned)方法。它代替了when(Object)。 |
BDDStubber willThrow(Class <?extended Throwable> toBeThrown) | 它类似于doThrow(Class <?extended Throwable> toBeThrown)方法。当我们想对一个带异常的void方法进行存根时使用它。 |
以下代码片段显示了如何使用BDD样式测试:
//given
given(seller.askMilk ()).willReturn(new Milk());
//when
Goods goods = shop.buyMilk ();
//then
assertThat(goods, containMilk ());
在上面的代码片段中, 我们使用了assertThat()方法而不是assertEquals()方法。如果通过静态导入引用代码, 则使代码更易于阅读和理解。
BDD样式示例
在这里, 我们将创建一个BDD样式测试的示例。切换到BDD样式仅在测试语法上有微小差异。它将测试语法分为三个部分:给定, 何时和然后使代码更具可读性。
- 给出:我们可以使用设置部分和给定的语法。
- 时间:我们可以进行测试的实际调用。
- 然后:我们可以使用诸如assertThat()之类的可读断言, 还可以检查后置条件是否得到满足。
让我们通过创建一个示例来了解BBD样式测试。
TestList.java
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;
public class TestList {
@Test
public void testList_usingBDD() {
//Given - setup part
List<String> mocklist = mock(List.class);
given(mocklist.get(Mockito.anyInt())).willReturn("Mockito");
//When - invocation
String string1 = mocklist.get(0);
//Then - readable assert
assertThat(string1, is("Mockito"));
}
}
输出如下
以下输出显示使用BDD样式测试已成功运行。
评论前必须登录!
注册