±à¼ÍƼö: |
±¾ÎÄÀ´×Ô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); |
±¸×¢
¼ÙÈçÄãÎÞ·¨¸øÄã³ÌÐòдµ¥Ôª²âÊÔ£¬ÄÇôÒâζ×ÅÄãµÄ³ÌÐò½á¹¹ÓÐÎÊÌ⣬ÐèÒªµ÷Õû»òÖØ¹¹¡£¶Ô´ý²âÊÔ´úÂëÒªÏòÉú²ú´úÂëÒ»Ñù£¬²âÊÔ´úÂëÒ²ÐèÒªÖØ¹¹ºÍά»¤¡£
|