經過入門篇,可以編寫出一個簡單的測試用例。
這篇講的是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異常。
