行为驱动的开发是一种敏捷的软件开发过程, 它支持软件项目中的开发人员, 质量分析师和业务成员之间的协作。它是从测试驱动开发(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方法进行存根时使用它。 |
//givengiven(seller.askMilk ()).willReturn(new Milk());
//whenGoods goods = shop.buyMilk ();
//thenassertThat(goods, containMilk ());
在上面的代码片段中, 我们使用了assertThat()方法而不是assertEquals()方法。如果通过静态导入引用代码, 则使代码更易于阅读和理解。
BDD样式示例
在这里, 我们将创建一个BDD样式测试的示例。切换到BDD样式仅在测试语法上有微小差异。它将测试语法分为三个部分:给定, 何时和然后使代码更具可读性。
- 给出:我们可以使用设置部分和给定的语法。
- 时间:我们可以进行测试的实际调用。
- 然后:我们可以使用诸如assertThat()之类的可读断言, 还可以检查后置条件是否得到满足。
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 partList<
String>
mocklist = mock(List.class);
given(mocklist.get(Mockito.anyInt())).willReturn("Mockito");
//When - invocation String string1 = mocklist.get(0);
//Then - readable assertassertThat(string1, is("Mockito"));
}}
输出如下
【行为驱动开发(BDD)】以下输出显示使用BDD样式测试已成功运行。
文章图片
推荐阅读
- Hamcrest Matchers介绍和用法
- 参数捕获器(ArgumentCaptor)
- Mockito参数匹配器
- 读取 Android 设备内核日志的方法
- etherlime-3-Etherlime Library API-Deployed Contract Wrapper
- sonarqube扫描安卓代码
- android license status unknown解决办法
- idea中applicationContext-dao.xml文件中Cannot resolve file***** :spring xml model validation问题
- 区块链资产管理钱包APP软件系统开发搭建