SpringBoot中使用JNnit4(一)之Mockito的使用
经过入门篇,可以编写出一个简单的测试用例。
这篇讲的是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异常。