经过入门篇,可以编写出一个简单的测试用例。
这篇讲的是BDDMockito的使用。
BDDMockito用于测试时进行打桩处理;通过它可以指定某个类的某个方法在什么情况下返回什么样的值。
在单元测试时,如果遇到复杂的业务场景,使用多个类时,就需要用到BDDMockito。
需要打桩的对象,只能是@Mock注解的方式
package xx.xx.test;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@WebAppConfiguration
public class ApplicationTests {
@Before
public void init(){
System.out.println("******测试开始");
}
@After
public void end(){
System.out.println("******测试结束");
}
@BeforeClass
public static void initClass(){
System.out.println("******测试开始初始化");
}
@AfterClass
public static void endClass(){
System.out.println("******测试结束初始化");
}
}
package xx.xx.test;
import org.mockito.BDDMockito;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import xx.xx.test.InfoService;
import xx.xx.test.UserService;
public class Test extends ApplicationTests{
@Mock
private UserService userService;
@Autowired
private InfoService infoService;
@org.junit.Test
public void add(){
int i = userService.add("王五");
System.out.println("Test.add.i:" + i);
int j = infoService.update("张三");
System.out.println("Test.add.j:" + j);
}
@Override
public void init(){
BDDMockito.given(userService.add("王五")).willReturn(9);
BDDMockito.given(userService.add("")).willReturn(0);
BDDMockito.given(userService.add(null)).willThrow(NullPointerException.class);
System.out.println("******重写测试开始");
}
}
package xx.xx.test;
public interface InfoService {
Integer update(String name);
}
package xx.xx.test.impl;
import org.springframework.stereotype.Service;
import xx.xx.test.InfoService;
@Service("infoService")
public class InfoServiceImpl implements InfoService{
public Integer update(String name){
return 1;
}
}
package xx.xx.test;
public interface UserService {
Integer add(String name);
}
打印结果:
******测试开始
******重写测试开始
Test.add.i:9
Test.add.j:1
******测试结束
******测试结束初始化
BDDMockito有哪些使用场景呢?
1、可以指定打桩对象的返回值。
1.1、使用given:
BDDMockito.given(userService.add("王五")).willReturn(9);
BDDMockito.given(userService.add("")).willReturn(0); BDDMockito.given(userService.add(null)).willThrow(NullPointerException.class);
上面代码的意思是:
当传入的参数是"王五"的时候,返回值是9。
当传入的参数是""时,返回的值是0。
当传入的参数是null时,抛出NullPointerException异常。