±à¼ÍƼö: |
±¾ÎÄÀ´×Ôcsdn£¬±¾Îļòµ¥½éÉÜÁËMockitoÊÇʲô£¬ÒÔ¼°MockitoÔÚµ¥Ôª²âÊÔÖеÄʹÓã¬Ï£ÍûÄܶÔÄúÓÐËù°ïÖú¡£ |
|
Ò»¡¢MockitoµÄ½éÉÜ
1. ʲôÊÇmock²âÊÔ£¿Ê²Ã´ÊÇmock¶ÔÏó£¿
ÏÈÀ´¿´¿´ÏÂÃæÕâ¸öʾÀý£º

´ÓÉÏͼ¿ÉÒÔ¿´³öÈç¹ûÎÒÃÇÒª¶ÔA½øÐвâÊÔ£¬ÄÇô¾ÍÒªÏȰÑÕû¸öÒÀÀµÊ÷¹¹½¨³öÀ´£¬Ò²¾ÍÊÇBCDEµÄʵÀý¡£
Ò»ÖÖÌæ´ú·½°¸¾ÍÊÇʹÓÃmocks

´ÓͼÖпÉÒÔÇåÎúµÄ¿´³ö
mock¶ÔÏó¾ÍÊÇÔÚµ÷ÊÔÆÚ¼äÓÃÀ´×÷ÎªÕæÊµ¶ÔÏóµÄÌæ´úÆ·¡£
mock²âÊÔ¾ÍÊÇÔÚ²âÊÔ¹ý³ÌÖУ¬¶ÔÄÇЩ²»ÈÝÒ×¹¹½¨µÄ¶ÔÏóÓÃÒ»¸öÐéÄâ¶ÔÏóÀ´´úÌæ²âÊԵķ½·¨¾Í½Ðmock²âÊÔ¡£
ÖªµÀʲôÊÇmock²âÊÔºó£¬ÄÇôÎÒÃǾÍÀ´ÈÏʶһÏÂmock¿ò¼Ü---Mockito
2. ʲôÊÇMockito£¿
³ýÁËÓÐÒ»¸öºÃ¼ÇµÄÃû×ÖÍ⣬Mockito³¢ÊÔÓò»Ò»ÑùµÄ·½·¨×ömocking²âÊÔ£¬ÊǼòµ¥ÇáÁ¿¼¶Äܹ»Ìæ´úEasyMockµÄ¿ò¼Ü¡£Ê¹Óüòµ¥£¬²âÊÔ´úÂë¿É¶ÁÐԸߣ¬·á¸»µÄÎĵµ°üº¬ÔÚjavadocÖУ¬Ö±½ÓÔÚIDEÖпɲ鿴Îĵµ£¬ÊµÀý£¬ËµÃ÷¡£¸ü¶àÐÅÏ¢£ºhttp://code.google.com/p/mockito/
3. stubºÍmock
Ïàͬµã£ºStubºÍMock¶ÔÏó¶¼ÊÇÓÃÀ´Ä£ÄâÍⲿÒÀÀµ£¬Ê¹ÎÒÃÇÄÜ¿ØÖÆ¡£
²»Í¬µã£º¶østubÍêÈ«ÊÇÄ£ÄâÒ»¸öÍⲿÒÀÀµ£¬ÓÃÀ´Ìṩ²âÊÔʱËùÐèÒªµÄ²âÊÔÊý¾Ý¡£¶ømock¶ÔÏóÓÃÀ´ÅжϲâÊÔÊÇ·ñÄÜͨ¹ý£¬Ò²¾ÍÊÇÓÃÀ´ÑéÖ¤²âÊÔÖÐÒÀÀµ¶ÔÏó¼äµÄ½»»¥ÄÜ·ñ´ïµ½Ô¤ÆÚ¡£ÔÚmocking¿ò¼ÜÖÐmock¶ÔÏó¿ÉÒÔͬʱ×÷ΪstubºÍmock¶ÔÏóʹÓã¬Á½Õß²¢Ã»ÓÐÑϸñÇø±ð¡£
¸ü¶àÐÅÏ¢£ºhttp://martinfowler.com/articles/mocksArentStubs.html
¶þ¡¢MockitoÔÚµ¥²âÖеÄʹÓÃ
1. ʹÓÃMavenÒýÈëMockito
ÔÚpom.xmlÎļþÖÐÖ±½Ó¼ÓÈëÒÔÏÂÒÀÀµ£¬¾Í¿ÉÒÔʹÓÃMockito½øÐе¥Ôª²âÊÔÁË¡£
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope> </dependency>
<dependency> <groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency> |
2. MockitoµÄÖØÒª×¢½â
2.1 @Mock
ºÜ¶àÇé¿öÏ£¬²âÊÔÒ»¸ö¹¦ÄÜÐèÒªÒÀÀµÐí¶àÆäËûÀàµÄ·µ»ØÖµ£¬Èç¹ûÆäËûÀàûÓкã¬Õâ¸öÀàµÄ¹¦ÄܾͲ»ÄܲâÊÔ¡£
ʹÓÃMockitoµÄ¹¦ÄÜ£¬ÎÒÃÇ¿ÉÒÔÈõ¥Ôª²âÊÔÍÑÀë¶ÔÆäËûÀàµÄÒÀÀµ£¬Èç¹ûÎÒÃÇÐèÒªÆäËûÀà·µ»ØÒ»¸öÆÚÍûµÄ·µ»ØÖµ£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓmockÕâ¸ö·µ»ØÖµ£¬ÈòâÊÔ¿ÉÒÔºÜ˳ÀûµÄ¼ÌÐøÏÂÈ¥£¬ÕâÑù²âÊÔ¾ÍÄÜרעÓÚµ¥ÔªÄÚ¡£
@Mock×¢½âÄÜÈÃÄã·ÂÔìÒ»¸öÒÀÀµ£¬È»ºóͨ¹ýMockito.when(class.funciton()).thenReturn(Object)ÕâÑùµÄ¸ñʽÀ´Ä£Äâ·µ»ØÖµ¡£
¸ù¾ÝÒ»¸öÀý×ÓÎÒÃÇÀ´³¢ÊÔһϣ¬ÏÈн¨Ò»¸öspringbootµÄproject£¬È»ºó½¨Èý¸öÀࣺ
UserDO
public class
UserDO {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
} |
UserManager
import org.springframework.stereotype.Service;
@Service
public class UserManager {
public UserDO getUserDO() {
UserDO user = new UserDO();
user.setName("real");
user.setAge(20);
return user;
}
} |
UserInfoManager
import org.springframework.beans.factory.annotation
.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserInfoManager {
@Autowired
private UserManager userManager;
public String getUserName() {
return userManager.getUserDO().getName();
}
public Integer getUserAge() {
return userManager.getUserDO().getAge();
}
} |
¸ù¾ÝÉÏÃæµÄ´úÂëÎÒÃÇ¿ÉÒÔ¿´³öUserDOÊÇÒ»¸öʵÌåÀ࣬UserManagerºÍUserInfoManager¶¼ÊÇ´¦ÀíÒµÎñµÄserviceÀ࣬¶øÆäÖÐUserInfoManagerÒÀÀµÁËUserManager¡£
´ËʱÎÒÃÇÏëÒª¶ÔUserInfoManager½øÐе¥Ôª²âÊÔ¿ÉÒÔ£¬ÔÚsrc/test°üÀïд²âÊÔÀ࣬Ê×ÏÈÎÒÃÇÒª±£Ö¤ÒÀÀµ×¢È룬ËùÒÔÎÒÃÇÒª¶Ô²âÊÔÀàÌí¼Ó×¢½â£º
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { JavaLearn04MockitoApplicationTests.class
}) |
²¢°ÑJavaLearn04MockitoApplicationTests.classÖеÄ×¢½â@SpringBootTestÌæ»»Îª@SpringBootApplication£¬ÈÃspringbootÕæµÄÅÜÆðÀ´£¬°ÑÉÏÃæµÄÀà¶¼¼ÓÔØ½øÀ´£¬²»È»»á±¨Õâ¸ö´í£º
Error creating
bean with name 'com.mrh.java.mockito.UserInfoManagerTest':
Unsatisfied dependency expressed through field
'userInfoManager'; |
ΪÁË·½±ãÎÒÃǰÑÓ¦¸Ã×¢½âÔÚ²âÊÔÀàÉϵÄ×¢½â£¬×¢½âµ½Ò»¸öBaseTestÉÏ£¬ÕâÑùÖ®ºó¶ÔËùÓÐÀàµÄ²âÊÔÀà¶¼¿ÉÒԼ̳ÐÕâ¸ö»ùÀ࣬ÕâÑù¾Í²»ÓÃÂé·³µÄÒ»¸öÒ»¸ö¼Ó×¢½âÁË¡£
@RunWith(SpringRunner.class)
@SpringBootApplication
public class JavaLearn04MockitoApplicationTests
{
@Test
public void contextLoads() {
}
} |
import org.junit.runner.RunWith;
import org.springframework.boot.test.context .SpringBootTest;
import org.springframework.context.annotation
.PropertySource;
import org.springframework.test.context.junit4
.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { JavaLearn04MockitoApplicationTests
.class })
@PropertySource(value = { "classpath:application.properties"
})
public class BaseTest {
} |
µ½´ËΪֹ£¬ÎÒÃÇ¿ÉÒÔ¿ªÊ¼ÈÏÕæµÄд²âÊÔÀàÁË£º
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory .annotation.Autowired;
public class UserInfoManagerTest extends BaseTest
{
@Autowired
private UserInfoManager userInfoManager;
@Test
public void getUserAge() {
Assert.assertTrue(userInfoManager.getUserAge()
.equals(20));
}
} |
ÎÒÃÇÔ¤²â»ñÈ¡µÄageÊýֵΪ20£¬²»È»¾ÍÊÇ´íµÄ¡£
¶øÔËÐнá¹û£¬¹ûȻΪ20.

µ«ÊÇÈç¹ûÎÒÃDz»Ïë¹ý¶àµÄÒÀÀµuserManagerµÄÍê³É¶È£¨±ÈÈçuserManagerµÄij¸ö·½·¨»¹Ã»Íê³É£¬»òÕßĿǰ»¹Ã»µ÷ͨ£©£¬¶ø¸øuserMangerµÄ·½·¨Ò»¸öαÔìµÄÔ¤ÆÚ½á¹û£¬ÕâÑùÕâ¸öµ¥Ôª²âÊԾͿÉÒÔ¶ÀÁ¢µÄ²âÊÔUserInfoManagerµÄÂß¼£¬¶ø²»»áÊܵ½userManagerµÄÓ°ÏìÁË£¬Ó¦¸ÃÔõô°ìÄØ£¿
Õâ¾ÍÊÇ@Mock·½·¨¿ÉÒÔ´óÏÔÉíÊÖµÄʱºòÁË¡£
´ÓÉÏÃæµÄuserInfoManager´úÂëÖп´³ö£¬ÎÒÃÇ·µ»ØµÄUserDOµÄageÊÇ20£¬ÎÒÃÇÔÚÕâ¶Î´úÂëÀïʹÓÃ@Mock×¢½â×¢ÈëÁËUserInfoManager£¬ÕâÑùÎÒÃǾͿÉÒÔͨ¹ýÉÏÃæÌáµ½¹ýµÄ·½·¨À´mockÒ»¸öÔ¤ÆÚµÄ·µ»ØÖµ¡£
public class
UserInfoManagerTest extends BaseTest {
@Mock
private UserInfoManager userInfoManager;
@Test
public void getUserAger() {
Mockito.when(userInfoManager.getUserAge()) .thenReturn(80);
Assert.assertTrue(userInfoManager.getUserAge()
.equals(80));
}
} |
Õâ¶Î´úÂëÖ»Óе±getUserAge()·½·¨·µ»Ø80µÄʱºò²Å»áͨ¹ý£¬Èç¹û²»ÊÇ80£¬ËµÃ÷ÎÒÃǵÄmock
ûÓгɹ¦¡£

½á¹û·µ»ØÈ·ÊµÊÇ80£¬Í¨¹ýÕâÑùµÄ·½·¨mockÊý¾ÝÊÇ¿ÉÐеġ££¨±ØÐë×¢ÒâµÄÊÇÔÚÅÜmock·½·¨Ö®Ç°
ÄÇôÓÖ²»µÃ²»Ìáµ½ÁíÍâÒ»ÖÖ³¡¾°ÁË£¬ÎÒÃDz»ÊÇÏëÒªmock UserInfoManagerµÄ·µ»ØÖµ£¬¶øÊÇÏëÒªmock
UserManagerµÄ·µ»ØÖµ£¬ÕâÑùuserInfoManagerµÄ´úÂ뻹ÕÕ³£ÅÜ£¬ÕâÑù²ÅÄÜÑéÖ¤UserInfoManagerÖдúÂëµÄÂß¼¡£
ÄÇôÎÒÃÇÐèÒªÓõ½ÏÂÒ»¸öºÜÖØÒªµÄ×¢½â@InjectMocks¡£
2.2 @InjectMocks
Õâ¸ö×¢½âµÄ×÷ÓÃÊÇ´´½¨Ò»¸öʵÀý£¬ÆäÓàÓÃ@Mock£¨»ò@Spy£©×¢½â´´½¨µÄmock½«±»×¢Èëµ½ÓøÃʵÀýÖС£
ʹÓÃÕâ¸ö×¢½â¿ÉÒÔ´´½¨Ò»¸öʵÀý£¬²¢ÇÒ½«ÄãÓÃ@Mock×¢½âµÄ¶ÔÏó×¢Èëµ½Õâ¸öʵÀýÖС£
ÓÃÕâ¸ö×¢½âÎÒÃǾͿÉÒÔÊÇʹÓÃ@Mock´´½¨mockµÄUserManager¶ÔÏ󣬲¢ÓÃ@InjectMocks×¢½â´´½¨Ò»¸öUserInfoManagerµÄʵÀý½«UserManager¶ÔÏó×¢ÈëÆäÖС£
±ØÐëÌáµ½µÄÊÇʹÓÃÕâ¸ö×¢½â£¬ÎÒÃÇÔÚµ¥²â·½·¨×îÇ°ÃæÒ»¶¨ÒªÖ´ÐÐÒÔÏÂÓï¾ä£º
MockitoAnnotations.initMocks(this); |
·ñÔòÎÞ·¨½«Mock×¢Èë¡£
public class
UserInfoManagerTest extends BaseTest {
@Mock
private UserManager userManager;
@InjectMocks
private UserInfoManager userInfoManager;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
}
@After
public void after() {
Mockito.reset(userManager);
}
@Test
public void getUserName() {
UserDO user = new UserDO();
user.setName("mock");
Mockito.when(userManager.getUserDO()).thenReturn(user);
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
}
} |
´Ó֮ǰµÄ´úÂëÎÒÃÇ¿ÉÒÔ¿´³öÀ´Èç¹ûÎÒÃÇÕæµÄµ÷ÓÃUserManagerµÄgetUserDO,·µ»ØµÄ¶ÔÏóÀïµÄnameÓ¦¸ÃÊÇ¡°real¡±£¬¶øÎÒÃÇÕâÀïÔ¤ÆÚmock³É¹¦ºó£¬·µ»ØµÄÓ¦¸ÃÊÇÎÒÃǵÄmockÊý¾Ý¡°mock¡±¡£

´úÂëͨ¹ý£¬ËµÃ÷mockµÄÒÀÀµÕýÈ·×¢ÈëÁË¡£
¿ÉÒÔ¿´µ½ÎÒÃÇͨ¹ý@MockºÍ@InjectMocks,ÎÒÃÇ¿ÉÒÔ¶Ô·µ»ØÖµºÍÒÀÀµµÄ·µ»ØÖµ½øÐÐmock£¬µ«ÊÇÏÂÃæµÄ´úÂëÈ´³öÁËÒ»µãÎÊÌ⣺
public class
UserInfoManagerTest extends BaseTest {
@Mock
private UserManager userManager;
@InjectMocks
private UserInfoManager userInfoManager;
// @Mock
// private UserInfoManager userInfoManager;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
}
@After
public void after() {
Mockito.reset(userManager);
}
@Test
public void getUserAge() {
Assert.assertTrue(userInfoManager.getUserAge()
.equals(20));
}
@Test
public void getUserName() {
UserDO user = new UserDO();
user.setName("mock");
Mockito.when(userManager.getUserDO()).thenReturn(user);
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
}
} |
µ±ÎÒÏëÔÚgetUserAgeµÄTestÀïÃæÊ¹ÓÃUserManagerÕæ·½·¨£¬ÔÚgetUserNameµÄTestÀïʹÓÃmockµÄ·µ»ØÖµÊ±¾ÍÓöµ½ÁËÎÊÌ⣬ËäÈ»ÎÒÔÚgetUserAgeµÄTestÀïÃæ²¢Ã»ÓжÔUserManager½øÐÐmock£¬µ«ÊÇËûÒ²ÖÕ¾¿²»ÊÇÒ»¸öÕæµÄÒÀÀµ£¬²»ÄÜ·µ»ØÕæµÄ½á¹ûÁË£¬
Ö»ÄÜ·µ»Ønull¡£ÔËÐнá¹ûÈçÏÂͼ£º

Èç¹ûÎÒÃÇÏë¶ÔÒÀÀµ×ö¾Ö²¿mock£¬ÏëÒªµÄʱºò¾ÍmockËü£¬²»ÏëÒªµÄʱºò¾ÍÔËÐÐÕæµÄ·½·¨Ó¦¸ÃÈçºÎÄØ£¿
½ÓÏÂÀ´¾ÍÒª½éÉÜÄÜÈÃÕâ¸ö¹¹ÏëʵÏÖµÄÏÂÒ»¸ö×¢½â£º@Spy¡£
2.3 @Spy
MockitoÖеÄMockºÍSpy¶¼¿ÉÓÃÓÚÀ¹½ØÄÇЩÉÐδʵÏÖ»ò²»ÆÚÍû±»ÕæÊµµ÷ÓõĶÔÏóºÍ·½·¨£¬²¢ÎªÆäÉèÖÃ×Ô¶¨ÒåÐÐΪ¡£¶þÕßµÄÇø±ðÔÚÓÚ£º
1¡¢MockÉùÃ÷µÄ¶ÔÏ󣬶Ժ¯ÊýµÄµ÷ÓþùÖ´ÐÐmock£¨¼´Ðé¼Ùº¯Êý£©£¬²»Ö´ÐÐÕæÕý²¿·Ö¡£
2¡¢SpyÉùÃ÷µÄ¶ÔÏ󣬶Ժ¯ÊýµÄµ÷ÓþùÖ´ÐÐÕæÕý²¿·Ö¡£
ÓÚÊÇÎÒÃǶÔ×Ô¼ºµÄ´úÂë×öһϵ÷Õû£º
public class
UserInfoManagerTest extends BaseTest {
@Spy
private UserManager userManager;
@InjectMocks
private UserInfoManager userInfoManager;
// @Mock
// private UserInfoManager userInfoManager;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
}
@After
public void after() {
Mockito.reset(userManager);
}
@Test
public void getUserAge() {
Assert.assertTrue(userInfoManager.getUserAge()
.equals(20));
}
@Test
public void getUserName() {
UserDO user = new UserDO();
user.setName("mock");
Mockito.when(userManager.getUserDO()) .thenReturn(user);
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
}
} |
ÓÃ@Spy×¢½âºóµÄ·½·¨£¬¿ÉÒÔÔÚÏëmockµÄʹÓÃmock£¬ÏëÓÃÕæÊµ·½·¨µÄʱºòʹÓÃÕæÊµ·½·¨¡£

½á¹û´úÂëͨ¹ýÁË¡£
Õâ¸öʱºòÎÒмÓÒ»¸öÀàOrgManager¡£
import org.springframework.stereotype.Service;
@Service
public class OrgManager {
public String getOrgName() {
return "abc company";
}
} |
È»ºóÐÞ¸ÄUserInfoManagerÔö¼ÓÒ»¸öÒÀÀµOrgManagerµÄ·½·¨£º
@Service
public class UserInfoManager {
@Autowired
private UserManager userManager;
@Autowired
private OrgManager orgManager;
public String getUserName() {
return userManager.getUserDO().getName();
}
public Integer getUserAge() {
return userManager.getUserDO().getAge();
}
public String getOrgName() {
return orgManager.getOrgName();
}
} |
Õâ¸öʱºòÎÒÃÇÔÚ²âÊÔÀàÀï¶ÔÕâ¸öз½·¨½øÐвâÊÔ£º

ÔÒòÕýÊÇÒòΪÎÒÃÇʹÓÃ@InjectMocks×¢ÈëÁËUserManager£¬µ«ÊÇOrgManager²¢Ã»Óб»×¢È룬ËùÒÔʵ¼ÊÉϽøÈë·½·¨µÄʱºòUserInfoManagerµÄÕâ¸öÒÀÀµÊǿյġ£

ÄѵÀÎÒÃÇÒªÔÚÍâÃæ@SpyÒ»¸öOrgManagerÈ»ºóºÍUserManagerÒ»Æð×¢ÈëÂ𣿵«ÊÇÎÒÃDz¢²»Ïë¶ÔÕâ¸öÀà½øÐÐmock£¬Èç¹ûÔÚÒÀÀµ¶àµÄÇé¿öÏÂÕâÑù×ö·Ç³£·±Ëö£¬ÄÇÎÒÃÇÄܲ»ÄÜÒ²Ôö¼Ó@Spy×¢½âUserInfoManagerÕâÑù£¬µ±ÎÒÃÇ×¢Èë@Spy¶ÔÏóµÄʱºòʹÓÃ@Spy¶ÔÏ󣬷ñÔòʹÓÃÕæ¶ÔÏóÄØ£¿£¨²»È·¶¨@SpyÓÐÕâ¸ö¹¦ÄÜ£©¡£
@InjectMocks
@Spy
private UserInfoManager userInfoManager; |
²âÊÔºó·¢ÏÖ@Spy¶ÔÏóÄÜÖ´ÐÐÕæÊµ´úÂ룬µ«ÊDz¢²»ÄÜΪ¶ÔÏó×¢ÈëÒÀÀµ¡£
¶ø@InjectMocksÊÇ¿ÉÒÔºÍ@AutowiredÒ»ÆðʹÓõģ¬ÎÒÃÇ¿ÉÒÔÁ½¸ö¸ö×¢½âµþ¼ÓʹÓã¬ÈÃ@Autowired×¢½âΪ¶ÔÏó×¢ÈëÕæÒÀÀµ¡£
@InjectMocks
@Autowired
private UserInfoManager userInfoManager; |
ÏÂͼ¿É¼ûÕâÑùµÄ·½·¨ÊÇ¿ÉÒÔͨ¹ýµÄ¡£

ÏÖÔÚ»¹ÓеÚÈýÖÖ³¡¾°£¬Èç¹ûÎÒµÄÒÀÀµµÄ¶ÔÏó»¹ÓÐÒÀÀµ£¨ÕâÔÚ´ó¶àÊýµÄÏîÄ¿ÖÐÊǷdz£³£¼ûµÄ£©£¬¸ù¾ÝÉÏÃæµÄ˵·¨ÓÃ@SpyµÄ¶ÔÏóÊDz»»á×Ô¶¯×¢ÈëÒÀÀµµÄ£¬´ËʱÔõô´¦ÀíÄØ£¿
ÎÒÃÇ¿ÉÒÔµþ¼Ó@SpyºÍ@AutowiredʹÓá£Õâ¸ö¾Í²»¾ÙÀý˵Ã÷ÁË¡£
3. ³£Ó÷½·¨
3.1 Mockito.when(classObject.function()) .thenReturn(Obj)
ÓÃÀ´mock·µ»ØÖµÉÏÃæÒѾÌá¹ýÁË¡£
3.2 Mockito.doReturn(obj).when(classObject)
.function()
ͬÑùÊÇÓÃÀ´Ä£ÄâÊý¾Ý£¬µ«ÊǺÍ3.1 ²»Í¬µÄÊÇ£¬3.1»áÕæµÄµ÷Ó÷½·¨£¬¶ø3.2²»»á¡£
ÐÞ¸Ä֮ǰµÄ²âÊÔÀàÀ´Ñé֤һϣº
public class
UserInfoManagerTest extends BaseTest {
@Spy
private UserManager userManager;
@InjectMocks
@Autowired
private UserInfoManager userInfoManager;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
}
@After
public void after() {
Mockito.reset(userManager);
}
@Test
public void getUserName() {
System.out.println("run getUserName");
UserDO user = new UserDO();
user.setName("mock");
Mockito.when(userManager.getUserDO()) .thenReturn(user);
System.out.println("start getUserName test");
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
Mockito.verify(userManager, times(2)).getUserDO();
System.out.println("end getUserName test");
}
@Test
public void getUserName2() {
System.out.println("run getUserName2");
UserDO user = new UserDO();
user.setName("mock");
Mockito.doReturn(user).when(userManager).getUserDO();
System.out.println("start getUserName2 test");
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
Mockito.verify(userManager, times(2)).getUserDO();
System.out.println("end getUserName2 test");
}
} |

Èçͼ¿É¼û£ºÔÚ½øÐÐwhen().thenReturn()µÄʱºò£¬ÎÒÃǵ÷ÓÃÁËÕæµÄ·½·¨¡£µ«ÊÇÔÚdoReturn().when()·½·¨µÄʱºò£¬ÎÒÃDz¢Ã»ÓÐÕæµÄÖ´ÐÐgetUserDO(),¶øÊÇÖ±½Ó´´½¨ÁË·µ»ØÖµ¡£
3.3 Mockito.doNothing().when(classObject).function()
ÓÃÓÚÄ£ÄâÎÞ·µ»ØÖµµÄ·½·¨µ÷ÓᣱÈÈçÎÒÃǵÄfunctionʵ¼ÊÅÜÊÇÅܲ»Í¨µÄ£¨±¨´í»òûÍê³É£©£¬ÓÃÕâ¸ö·½·¨¾Í¿ÉÒÔÈôúÂëÖ±½ÓÄ£ÄâËû³É¹¦Ö´ÐС£
±ÈÈçÎÒÃǵ÷Õû֮ǰµÄ´úÂ룺
UserManager:
@Service
public class UserManager {
public UserDO getUserDO() {
UserDO user = new UserDO();
user.setName("real");
user.setAge(20);
System.out.println("run getUserDO");
return user;
}
public void unfinishedFunciotn() throws Exception
{
throw new Exception();
}
} |
UserInfoManager:
@Service
public class UserInfoManager {
@Autowired
private UserManager userManager;
@Autowired
private OrgManager orgManager;
public String getUserName() {
return userManager.getUserDO().getName();
}
public Integer getUserAge() {
return userManager.getUserDO().getAge();
}
public String getOrgName() {
return orgManager.getOrgName();
}
public boolean unfinishedFunciotn() throws Exception
{
userManager.unfinishedFunciotn();
return true;
}
} |
¿ÉÒÔ¿´³öмӵķ½·¨ÊÇÒ»¶¨»áÅ׳öÒì³£µÄ£¬µ«ÊÇÈç¹ûÎÒÃÇÏëÈÃunfinishedFunciotn£¨£©·µ»Øtrue£¬Ó¦¸ÃÈçºÎmockÄØ£¿
@Test
public void unfinishedFunciotn() throws Exception
{
Mockito.doNothing().when(userManager) .unfinishedFunciotn();
Assert.assertTrue(userInfoManager.unfinishedFunciotn());
} |

ÈçͼËùʾ£¬Ö»ÒªÓÃÕâ¸ö·½·¨mockÁË£¬¾Í²»»áÖ´Ðз½·¨ÀïÃæµÄ´úÂ룬Ҳ¾Í²»»áÅ׳öÒì³£ÁË¡£
3.4 verify()
verify·½·¨ÓÃÓÚÑéÖ¤·½·¨×ܹ²±»µ÷ÓÃÁ˼¸´Î£¬ÇÒÖ»ÄÜÑéÖ¤mockµÄ·½·¨¡£
@Test
public void getUserName2() {
System.out.println("run getUserName2");
UserDO user = new UserDO();
user.setName("mock");
Mockito.doReturn(user).when(userManager).getUserDO();
System.out.println("start getUserName2 test");
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
Assert.assertTrue(userInfoManager.getUserName()
.equals("mock"));
Mockito.verify(userManager, times(2)).getUserDO();
System.out.println("end getUserName2 test");
} |
¿ÉÒÔÑéÖ¤±»×¢ÈëuserInfoManagerµÄuserManagerÀïµÄgetUserDO()·½·¨±»µ÷ÓÃÁËÁ½´Î¡£
|