经过入门篇,可以编写出一个简单的测试用例。
这篇讲的是BDDMockito的使用。
BDDMockito用于测试时进行打桩处理;通过它可以指定某个类的某个方法在什么情况下返回什么样的值。
在单元测试时,如果遇到复杂的业务场景,使用多个类时,就需要用到BDDMockito。
需要打桩的对象,只能是@Mock注解的方式
1package xx.xx.test; 2 3import org.junit.After; 4import org.junit.AfterClass; 5import org.junit.Before; 6import org.junit.BeforeClass; 7import org.junit.runner.RunWith; 8import org.springframework.boot.test.context.SpringBootTest; 9import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 10import org.springframework.test.context.web.WebAppConfiguration; 11 12@RunWith(SpringJUnit4ClassRunner.class) 13@SpringBootTest 14@WebAppConfiguration 15public class ApplicationTests { 16 17 @Before 18 public void init(){ 19 System.out.println("******测试开始"); 20 } 21 22 @After 23 public void end(){ 24 System.out.println("******测试结束"); 25 } 26 27 @BeforeClass 28 public static void initClass(){ 29 System.out.println("******测试开始初始化"); 30 } 31 32 @AfterClass 33 public static void endClass(){ 34 System.out.println("******测试结束初始化"); 35 } 36} 37 38package xx.xx.test; 39 40import org.mockito.BDDMockito; 41import org.mockito.Mock; 42import org.springframework.beans.factory.annotation.Autowired; 43import org.springframework.boot.test.mock.mockito.MockBean; 44 45import xx.xx.test.InfoService; 46import xx.xx.test.UserService; 47 48public class Test extends ApplicationTests{ 49 50 @Mock 51 private UserService userService; 52 @Autowired 53 private InfoService infoService; 54 55 @org.junit.Test 56 public void add(){ 57 int i = userService.add("王五"); 58 System.out.println("Test.add.i:" + i); 59 int j = infoService.update("张三"); 60 System.out.println("Test.add.j:" + j); 61 } 62 63 @Override 64 public void init(){ 65 BDDMockito.given(userService.add("王五")).willReturn(9); 66 BDDMockito.given(userService.add("")).willReturn(0); 67 BDDMockito.given(userService.add(null)).willThrow(NullPointerException.class); 68 System.out.println("******重写测试开始"); 69 } 70} 71 72package xx.xx.test; 73 74public interface InfoService { 75 76 Integer update(String name); 77 78} 79 80package xx.xx.test.impl; 81 82import org.springframework.stereotype.Service; 83 84import xx.xx.test.InfoService; 85 86@Service("infoService") 87public class InfoServiceImpl implements InfoService{ 88 89 public Integer update(String name){ 90 return 1; 91 } 92 93} 94 95package xx.xx.test; 96 97public interface UserService { 98 99 Integer add(String name); 100 101}
打印结果:
******测试开始
******重写测试开始
Test.add.i:9
Test.add.j:1
******测试结束
******测试结束初始化
BDDMockito有哪些使用场景呢?
1、可以指定打桩对象的返回值。
1.1、使用given:
1BDDMockito.given(userService.add("王五")).willReturn(9); 2BDDMockito.given(userService.add("")).willReturn(0); BDDMockito.given(userService.add(null)).willThrow(NullPointerException.class);
上面代码的意思是:
当传入的参数是"王五"的时候,返回值是9。
当传入的参数是""时,返回的值是0。
当传入的参数是null时,抛出NullPointerException异常。