日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

强大的Mockito测试框架(转)

發(fā)布時(shí)間:2025/1/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强大的Mockito测试框架(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、自動(dòng)生成Mock類(lèi)
在需要Mock的屬性上標(biāo)記@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中顯示調(diào)用MockitoAnnotations.initMocks(this);生成Mock類(lèi)即可。

2、自動(dòng)注入Mock類(lèi)到被測(cè)試類(lèi)
只要在被測(cè)試類(lèi)上標(biāo)記@InjectMocks,Mockito就會(huì)自動(dòng)將標(biāo)記@Mock、@Spy等注解的屬性值注入到被測(cè)試類(lèi)中

import static org.mockito.Mockito.when;import java.util.Collections; import java.util.List;import javax.annotation.Resource;import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.cdai.ssi.user.dao.UserDao; import com.cdai.ssi.user.domain.UserDomain; import com.cdai.ssi.user.dto.UserDto; import com.cdai.ssi.user.service.UserService;@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:spring/spring-config.xml"}) public class UserServiceTest {@InjectMocks@Resource(name= "userService")privateUserService userService;@MockprivateUserDao userDao;@Beforepublicvoid setUp() {MockitoAnnotations.initMocks(this);}@Testpublicvoid testQueryAll() {when(userDao.selectAll()).thenReturn(Collections.<UserDomain>emptyList());List<UserDto>dtoList = userService.queryAll();Assert.assertTrue(dtoList.isEmpty());}}

@InjectMocks的問(wèn)題是:如果被測(cè)試類(lèi)是代理類(lèi),那么注入會(huì)失效。比如上面的UserService如果是事務(wù)或者其他AOP代理類(lèi),那么進(jìn)入@Test方法時(shí)UserService中的DAO屬性不會(huì)被Mock類(lèi)替換。
3、有些方法想Mock定制,有些想調(diào)用真實(shí)方法
因?yàn)?#64;Mock針對(duì)接口生成Mock類(lèi),所以我們是沒(méi)法調(diào)用到真實(shí)的實(shí)現(xiàn)類(lèi)的方法。可以使用@Spy注解標(biāo)注屬性,并且標(biāo)注@Resource注解讓Spring注入真實(shí)實(shí)現(xiàn)類(lèi),那么Mockito就會(huì)自動(dòng)生成Spy類(lèi)。

例如:
@InjectMocks
@Resource(name ="userService")
privateUserService userService;

@Spy
@Resource
privateUserDao userDao;

Spy類(lèi)就可以滿(mǎn)足我們的要求。如果一個(gè)方法定制了返回值或者異常,那么就會(huì)按照定制的方式被調(diào)用執(zhí)行;如果一個(gè)方法沒(méi)被定制,那么調(diào)用的就是真實(shí)類(lèi)的方法。
如果我們定制了一個(gè)方法A后,再下一個(gè)測(cè)試方法中又想調(diào)用真實(shí)方法,那么只需在方法A被調(diào)用前,調(diào)用Mockito.reset(spyObject);就行了。

import static org.mockito.Mockito.when;import org.mockito.Mockito;public class TestMockObject implementsITestMock {publicstatic void main(String[] args) {ITestMockmock = Mockito.mock(TestMockObject.class);System.out.println(mock.test1());System.out.println(mock.test2());ITestMockspy = Mockito.spy(new TestMockObject());System.out.println(spy.test1());System.out.println(spy.test2());when(spy.test1()).thenReturn(100);System.out.println(spy.test1());Mockito.reset(spy);System.out.println(spy.test1());System.out.println(spy.test2());when(spy.test1()).thenReturn(104);System.out.println(spy.test1());}@Overridepublicint test1() {System.out.print("RealTest1()!!! - ");return1;}@Overridepublicint test2() {System.out.print("RealTest2()!!! - ");return2;}} 輸出為: 0 0 Real Test1()!!! - 1 Real Test2()!!! - 2 Real Test1()!!! - 100 Real Test1()!!! - 1 Real Test2()!!! - 2 Real Test1()!!! - 104

?

http://www.open-open.com/lib/view/open1359969858611.html

?

轉(zhuǎn)載于:https://www.cnblogs.com/softidea/p/4159133.html

總結(jié)

以上是生活随笔為你收集整理的强大的Mockito测试框架(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。