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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Javaµ¥Ôª²âÊÔÈëÃÅ
 
  5212  次浏览      30
 2019-8-7
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôsegmentfault£¬±¾ÎĽéÉÜÁËʲôÊǵ¥Ôª²âÊÔ£¬ÎªÊ²Ã´ÐèÒªµ¥Ôª²âÊÔ£¬²âÊԵķÖÀàÒÔ¼°JunitºÍMockµÄÏà¹Ø½éÉܵȡ£

ʲôÊǵ¥Ôª²âÊÔ

¶¨Ò壺µ¥Ôª²âÊÔÊǶÔÈí¼þ»ò³ÌÐòµÄ»ù±¾£¨×îС£©×é³Éµ¥ÔªµÄ²âÊÔ

¶ÔÏ󣺷½·¨¡¢Àà

ÌØµã£º

ΪʲôҪдµ¥Ôª²âÊÔ

Ðè²»ÐèҪдµ¥Ôª²âÊÔ

Ö»Òª³ÌÐòÄÜÔËÐоͿÉÒÔÁË£¬Ð´µ¥Ôª²âÊÔÀË·Ñʱ¼ä

´úÂëºÜ¼òµ¥²»ÐèÒªµ¥Ôª²âÊÔ

ÎÒ±£Ö¤²»»áÓÐʲôÎÊÌâµÄ

²âÊÔÈËÔ±²âÊÔһϾͿÉÒÔÁË

Õâ´ÎûÓÐʱ¼äдÁË£¬Ï´β¹ÉϰÉ

²âÊÔ·ÖÀà

µ¥Ôª²âÊÔ->¼¯³É²âÊÔ->¶Ëµ½¶Ë²âÊÔ

¸÷²âÊÔÕ¼±È

Junit½éÉÜ

JunitÀý×Ó

import org.junit.*;
import static org.junit.Assert.fail;

public class ClassNameTest {
@BeforeClass //¹«¿ª±í̬ÎÞ·µ»ØÖµ
public static void beforeClass() throws Exception{
//ÿ´Î²âÊÔÀàÖ´ÐÐǰִÐÐÒ»´Î£¬Ö÷ÒªÓÃÀ´³õʹ»¯¹«¹²×ÊÔ´µÈ
}
@AfterClass //¹«¿ª±í̬ÎÞ·µ»ØÖµ
public static void afterClass() throws Exception{
//ÿ´Î²âÊÔÀàÖ´ÐÐÍê³ÉºóÖ´ÐÐÒ»´Î£¬Ö÷ÒªÓÃÀ´ÊÍ·Å×ÊÔ´»òÇåÀí¹¤×÷
}
@Before
public void setup() throws Exception {
//ÿ¸ö²âÊÔ°¸ÀýÖ´ÐÐǰ¶¼»áÖ´ÐÐÒ»´Î
}
@After
public void teardown() throws Exception {
//ÿ¸ö²âÊÔ°¸ÀýÖ´ÐÐÍê³Éºó¶¼»áÖ´ÐÐÒ»´Î
}
@Test
public void testMethodName_give_¡­_when_¡­_then_¡­() {
fail("ʧ°Ü");
}
}

³£ÓÃ×¢½â

@Ignore
¸Ã×¢½â±ê¼ÇµÄ²âÊÔ·½·¨ÔÚ²âÊÔÖлᱻºöÂÔ

@Test

@Test(expected=xxxException.class) ¶ÏÑԸ÷½·¨»áÅ׳öÒì³£
@Test(timeout=1000) Ö´ÐÐʱ¼ä³¬¹ýÉèÖõÄÖµ¸Ã°¸Àý»áʧ°Ü

@RunWith

@RunWith(Suite.class) ²âÊÔ¼¯ÔËÐÐÆ÷ÅäºÏʹÓòâÊÔ¼¯¹¦ÄÜ
@RunWith(JUnit4.class) ĬÈÏÔËÐÐÆ÷
@RunWith(Parameterized.class) ²ÎÊý»¯ÔËÐÐÆ÷
@RunWith(Suite.class)
@Suite.SuiteClasses({ CalculatorTest.class,SquareTest.class})

@Rule
public class ExpectedExceptionsTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void verifiesTypeAndMessage() {
thrown.expect(RuntimeException.class);
thrown.expectMessage("Runtime exception occurred");
throw new RuntimeException("Runtime exception occurred");
}
}

²ÎÊý»¯

@RunWith(Parameterized.class)
public class PrimeFactorTest {
private PrimeFactor primeFactor;
private int input;
private List<Integer> expected;
//¹¹Ô캯Êý
public PrimeFactorTest(int input, List<Integer> expected) {
this.input = input;
this.expected = expected;
}
@Parameterized.Parameters
public static Collection init() {
return Arrays.asList(new Object[][]{
{18, Arrays.asList(2, 3, 3)}
});
}
@Test
public void testFactor_when_input_18_then_must_return_2_3_3() {
Assert.assertEquals(expected, primeFactor.factor(input));
}
}

¶ÏÑÔ

³£ÓõĶÏÑÔ·½·¨ÈçÏ£º
assertEquals(a, b) ²âÊÔaÊÇ·ñµÈÓÚb£¨aºÍbÊÇԭʼÀàÐÍÊýÖµ(primitive value)»òÕß±ØÐëΪʵÏֱȽ϶ø¾ßÓÐequal·½·¨£©
assertFalse(a) ²âÊÔaÊÇ·ñΪfalse£¨¼Ù£©£¬aÊÇÒ»¸öBooleanÊýÖµ¡£
assertTrue(a) ²âÊÔaÊÇ·ñΪtrue£¨Õ棩£¬aÊÇÒ»¸öBooleanÊýÖµ
assertNotNull(a) ²âÊÔaÊÇ·ñ·Ç¿Õ£¬aÊÇÒ»¸ö¶ÔÏó»òÕßnull¡£
assertNull(a) ²âÊÔaÊÇ·ñΪnull£¬aÊÇÒ»¸ö¶ÔÏó»òÕßnull¡£
assertNotSame(a, b) ²âÊÔaºÍbÊÇ·ñûÓж¼ÒýÓÃͬһ¸ö¶ÔÏó¡£
assertSame(a, b) ²âÊÔaºÍbÊÇ·ñ¶¼ÒýÓÃͬһ¸ö¶ÔÏó¡£
fail(string) FailÈòâÊÔʧ°Ü£¬²¢¸ø³öÖ¸¶¨ÐÅÏ¢¡£
assertThat(expected, Matcher) ͨ¹ýMatcher¶ÏÑÔ
Hamcrest £ºgreaterThan£¬greaterThanOrEqualTo£¬lessThan£¬anything£¬anyOf£¬containsString

½¨Òé

ʹÓÃgive when then·½Ê½ÃüÃûÄãµÄ²âÊÔ·½·¨Ãû³Æ¡£

Ò»¸ö°¸Àýֻдһ¸ö¶ÏÑÔ¡£

ҪдעÊÍ£¬½¨Òé·ÖΪÈçÏÂ4²½Öè¡£

²âÊÔ³¡¾°

×¼±¸Êý¾Ý

²âÊÔÖ´ÐÐ

¶ÏÑÔ

Mock½éÉÜ

Ò»¡¢mock¾ÍÊÇÔÚ²âÊÔ¹ý³ÌÖУ¬¶ÔÓÚijЩ²»ÈÝÒ×¹¹Ôì»òÕß²»ÈÝÒ×»ñÈ¡µÄ¶ÔÏó£¬ÓÃÒ»¸öÐéÄâµÄ¶ÔÏóÀ´´´½¨ÒÔ±ã²âÊԵIJâÊÔ·½·¨£¬Õâ¸öÐéÄâµÄ¶ÔÏó¾ÍÊÇmock¶ÔÏó¡£mock¶ÔÏó¾ÍÊÇÕæÊµ¶ÔÏóÔÚµ÷ÊÔÆÚ¼äµÄ´úÌæÆ·¡£

Java³£ÓÃMock

EasyMock¡¢JMock¡¢PowerMock¡¢MockitµÈ

¶þ¡¢Mock¹¤¾ßµÄÔ­Àí

mock¹¤¾ß¹¤×÷µÄÔ­Àí´ó¶¼ÈçÏ£º

record½×¶Î£ºÂ¼ÖÆÆÚÍû¡£Ò²¿ÉÒÔÀí½âΪÊý¾Ý×¼±¸½×¶Î¡£´´½¨ÒÀÀµµÄclass »òinterface»òmethod £¬Ä£Äâ·µ»ØµÄÊý¾Ý£¬¼°µ÷ÓõĴÎÊýµÈ¡£

replay½×¶Î£ºÍ¨¹ýµ÷Óñ»²â´úÂ룬ִÐвâÊÔ¡£ÆÚ¼ä»áinvoke µ½ µÚÒ»½×¶ÎrecordµÄmock¶ÔÏó»ò·½·¨¡£

verify½×¶Î£ºÑéÖ¤¡£¿ÉÒÔÑéÖ¤µ÷Ó÷µ»ØÊÇ·ñÕýÈ·¡£¼°mockµÄ·½·¨µ÷ÓôÎÊý£¬Ë³ÐòµÈ¡£

Èý¡¢MockitoʹÓýéÉÜ

ͨ¹ý´úÂë´´½¨
1. public class UserServiceTest {
2. private UserService userService;
3. private UserDao mockUserDao;
4. @Before
5. public void setUp() {
6. mockUserDao = mock(UserDao.class);
7. userService = new UserServiceImpl();
8. userService.setUserDao(mockUserDao);
9. }
ͨ¹ý×¢½â
1. public class UserServiceTest {
2.
3. @InjectMocks
4. private UserServiceImpl userService;
5.
6. @Mock
7. private UserDao mockUserDao;
8.
9. @Before
10. public void setUp() {
11. MockitoAnnotations.initMocks(this);
12. }

ËÄ¡¢Mockito³£Ó÷½·¨

verify
verify(mock, never()).add("twice"); ÑéÖ¤add·½·¨Ã»Óб»µ÷ÓÃ
verify(mock, times(2)).add("twice"); ÑéÖ¤add·½·¨±»µ÷ÓÃÁË2´Î
verify(mock, atLeast(n)).someMethod(); ·½·¨ÖÁÉÙ±»µ÷ÓÃn´Î
verify(mock, atMost(n)).someMethod(); ·½·¨×î¶à±»µ÷ÓÃn´Î
when
when(mock.someMethod()).thenReturn(value1) .thenReturn(value2);
when(mock.get(0)).thenReturn("first");
when(mock.get(1)).thenThrow(new RuntimeException());
when(mock.get(anyInt())).thenReturn("element");
spy
List spy = spy(new LinkedList());
when(spy.get(0)).thenReturn(¡°foo");
doReturn("foo").when(spy).get(0);

±¸×¢

¼ÙÈçÄãÎÞ·¨¸øÄã³ÌÐòдµ¥Ôª²âÊÔ£¬ÄÇôÒâζ×ÅÄãµÄ³ÌÐò½á¹¹ÓÐÎÊÌ⣬ÐèÒªµ÷Õû»òÖØ¹¹¡£¶Ô´ý²âÊÔ´úÂëÒªÏòÉú²ú´úÂëÒ»Ñù£¬²âÊÔ´úÂëÒ²ÐèÒªÖØ¹¹ºÍά»¤¡£

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

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

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

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