Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
µ¥Ôª²âÊÔ¹¤¾ß-MockitoѧϰÐĵÃ
 
  6178  次浏览      30
 2019-8-15
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ô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()·½·¨±»µ÷ÓÃÁËÁ½´Î¡£

 
   
6178 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù