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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Javaµ¥Ôª²âÊÔ(Junit+Mock+´úÂ븲¸ÇÂÊ)
 
×÷ÕߣºÔ¶°²¼Ò À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-8-28
  5846  次浏览      29
 

µ¥Ôª²âÊÔÊDZàд²âÊÔ´úÂ룬ÓÃÀ´¼ì²âÌØ¶¨µÄ¡¢Ã÷È·µÄ¡¢Ï¸¿ÅÁ£µÄ¹¦ÄÜ¡£µ¥Ôª²âÊÔ²¢²»Ò»¶¨±£Ö¤³ÌÐò¹¦ÄÜÊÇÕýÈ·µÄ£¬¸ü²»±£Ö¤ÕûÌåÒµÎñÊÇ×¼±¸µÄ¡£

µ¥Ôª²âÊÔ²»½ö½öÓÃÀ´±£Ö¤µ±Ç°´úÂëµÄÕýÈ·ÐÔ£¬¸üÖØÒªµÄÊÇÓÃÀ´±£Ö¤´úÂëÐÞ¸´¡¢¸Ä½ø»òÖØ¹¹Ö®ºóµÄÕýÈ·ÐÔ¡£

Ò»°ãÀ´Ëµ£¬µ¥Ôª²âÊÔÈÎÎñ°üÀ¨

JUNIT

JUnitÊÇJavaµ¥Ôª²âÊÔ¿ò¼Ü£¬ÒѾ­ÔÚEclipseÖÐĬÈϰ²×°¡£Ä¿Ç°Ö÷Á÷µÄÓÐJUnit3ºÍJUnit4¡£JUnit3ÖУ¬²âÊÔÓÃÀýÐèÒª¼Ì³ÐTestCaseÀà¡£JUnit4ÖУ¬²âÊÔÓÃÀýÎÞÐè¼Ì³ÐTestCaseÀֻ࣬ÐèҪʹÓÃ@TestµÈ×¢½â¡£

Junit3

ÏÈ¿´Ò»¸öJunit3µÄÑùÀý

// ²âÊÔjava.lang.Math  
2.// ±ØÐë¼Ì³ÐTestCase
3.public class Junit3TestCase extends TestCase {
4. public Junit3TestCase() {
5. super();
6. }
7.
8. // ´«Èë²âÊÔÓÃÀýÃû³Æ
9. public Junit3TestCase(String name) {
10. super(name);
11. }
12.
13. // ÔÚÿ¸öTestÔËÐÐ֮ǰÔËÐÐ
14. @Override
15. protected void setUp() throws Exception {
16. System.out.println("Set up");
17. }
18. // ²âÊÔ·½·¨¡£
19. // ·½·¨Ãû³Æ±ØÐëÒÔtest¿ªÍ·£¬Ã»ÓвÎÊý£¬ÎÞ·µ»ØÖµ£¬Êǹ«¿ªµÄ£¬¿ÉÒÔÅ׳öÒì³£
20. // Ò²¼´ÀàËÆpublic void testXXX() throws Exception {}
21. public void testMathPow() {
22. System.out.println("Test Math.pow");
23. Assert.assertEquals(4.0, Math.pow(2.0, 2.0));
24. }
25.
26. public void testMathMin() {
27. System.out.println("Test Math.min");
28. Assert.assertEquals(2.0, Math.min(2.0, 4.0));
29. }
30.
31. // ÔÚÿ¸öTestÔËÐÐÖ®ºóÔËÐÐ
32. @Override
33. protected void tearDown() throws Exception {
34. System.out.println("Tear down");
35. }
36.}

Èç¹û²ÉÓÃĬÈϵÄTestSuite£¬Ôò²âÊÔ·½·¨±ØÐëÊÇpublic void testXXX() [throws Exception] {}µÄÐÎʽ£¬²¢ÇÒ²»ÄÜ´æÔÚÒÀÀµ¹ØÏµ£¬ÒòΪ²âÊÔ·½·¨µÄµ÷ÓÃ˳ÐòÊDz»¿ÉÔ¤ÖªµÄ¡£

ÉÏÀýÖ´Ðк󣬿ØÖÆÌ¨»áÊä³ö

1.Set up  
2.Test Math.pow
3.Tear down
4.Set up
5.Test Math.min
6.Tear down

´ÓÖУ¬¿ÉÒԲ²⵽£¬¶ÔÓÚÿ¸ö²âÊÔ·½·¨£¬µ÷ÓõÄÐÎʽÊÇ£º

1.testCase.setUp();  
2.testCase.testXXX();
3.testCase.tearDown();

ÔËÐвâÊÔ·½·¨

ÔÚEclipseÖУ¬¿ÉÒÔÖ±½ÓÔÚÀàÃû»ò²âÊÔ·½·¨ÉÏÓÒ»÷£¬ÔÚµ¯³öµÄÓÒ»÷²Ëµ¥ÖÐÑ¡ÔñRun As -> JUnit Test¡£

ÔÚMvnÖУ¬¿ÉÒÔÖ±½Óͨ¹ýmvn testÃüÁîÔËÐвâÊÔÓÃÀý¡£

Ò²¿ÉÒÔͨ¹ýJava·½Ê½µ÷Ó㬴´½¨Ò»¸öTestCaseʵÀý£¬È»ºóÖØÔØrunTest()·½·¨£¬ÔÚÆä·½·¨ÄÚµ÷ÓòâÊÔ·½·¨£¨¿ÉÒÔ¶à¸ö£©¡£

1.TestCase test = new Junit3TestCase("mathPow") {  
2. // ÖØÔØ
3. protected void runTest() throws Throwable {
4. testMathPow();
5. };
6.};
7.test.run();

¸ü¼Ó±ã½ÝµØ£¬¿ÉÒÔÔÚ´´½¨TestCaseʵÀýʱֱ½Ó´«Èë²âÊÔ·½·¨Ãû³Æ£¬JUnit»á×Ô¶¯µ÷Óô˲âÊÔ·½·¨£¬Èç

1.TestCase test = new Junit3TestCase("testMathPow");  
2.test.run();

Junit TestSuite

TestSuiteÊDzâÊÔÓÃÀýÌ×¼þ£¬Äܹ»ÔËÐйý¸ö²âÊÔ·½·¨¡£Èç¹û²»Ö¸¶¨TestSuite£¬»á´´½¨Ò»¸öĬÈϵÄTestSuite¡£Ä¬ÈÏTestSuite»áɨÃ赱ǰÄÚÖеÄËùÓвâÊÔ·½·¨£¬È»ºóÔËÐС£

Èç¹û²»Ïë²ÉÓÃĬÈϵÄTestSuite£¬Ôò¿ÉÒÔ×Ô¶¨ÒåTestSuite¡£ÔÚTestCaseÖУ¬¿ÉÒÔͨ¹ý¾²Ì¬·½·¨suite()·µ»Ø×Ô¶¨ÒåµÄsuite¡£

import junit.framework.Assert;  
2.import junit.framework.Test;
3.import junit.framework.TestCase;
4.import junit.framework.TestSuite;
5.
6.public class Junit3TestCase extends TestCase {
7. //...
8. public static Test suite() {
9. System.out.println("create suite");
10. TestSuite suite = new TestSuite();
11. suite.addTest(new Junit3TestCase("testMathPow"));
12. return suite;
13. }
14.}

ÔÊÐíÉÏÊö·½·¨£¬¿ØÖÆÌ¨Êä³ö

дµÀ

create suite
Set up
Test Math.pow
Tear down

²¢ÇÒÖ»ÔËÐÐÁËtestMathPow²âÊÔ·½·¨£¬¶øÃ»ÓÐÔËÐÐtestMathMin²âÊÔ·½·¨¡£Í¨¹ýÏÔʽָ¶¨²âÊÔ·½·¨£¬¿ÉÒÔ¿ØÖƲâÊÔÖ´ÐеÄ˳Ðò¡£

Ò²¿ÉÒÔͨ¹ýJavaµÄ·½Ê½´´½¨TestSuite£¬È»ºóµ÷ÓÃTestCase£¬Èç

// ÏÈ´´½¨TestSuite£¬ÔÙÌí¼Ó²âÊÔ·½·¨  
2.TestSuite testSuite = new TestSuite();
3.testSuite.addTest(new Junit3TestCase("testMathPow"));
4.
5.// »òÕß ´«ÈëClass£¬TestSuite»áɨÃèÆäÖеIJâÊÔ·½·¨¡£
6.TestSuite testSuite = new TestSuite(Junit3TestCase.class,Junit3TestCase2.class,Junit3TestCase3.class);
7.
8.// ÔËÐÐtestSuite
9.TestResult testResult = new TestResult();
10.testSuite.run(testResult);

testResultÖб£´æÁ˺ܶà²âÊÔÊý¾Ý£¬°üÀ¨ÔËÐвâÊÔ·½·¨ÊýÄ¿(runCount)µÈ¡£

JUnit4

ÓëJUnit3²»Í¬£¬JUnit4ͨ¹ý×¢½âµÄ·½Ê½À´Ê¶±ð²âÊÔ·½·¨¡£Ä¿Ç°Ö§³ÖµÄÖ÷Ҫע½âÓУº

@BeforeClass È«¾ÖÖ»»áÖ´ÐÐÒ»´Î£¬¶øÇÒÊǵÚÒ»¸öÔËÐÐ

@Before ÔÚ²âÊÔ·½·¨ÔËÐÐ֮ǰÔËÐÐ

@Test ²âÊÔ·½·¨

@After ÔÚ²âÊÔ·½·¨ÔËÐÐÖ®ºóÔÊÐí

@AfterClass È«¾ÖÖ»»áÖ´ÐÐÒ»´Î£¬¶øÇÒÊÇ×îºóÒ»¸öÔËÐÐ

@Ignore ºöÂÔ´Ë·½·¨

ÏÂÃæ¾ÙÒ»¸öÑùÀý£º

import org.junit.After;  
2.import org.junit.AfterClass;
3.import org.junit.Assert;
4.import org.junit.Before;
5.import org.junit.BeforeClass;
6.import org.junit.Ignore;
7.import org.junit.Test;
8.
9.public class Junit4TestCase {
10.
11. @BeforeClass
12. public static void setUpBeforeClass() {
13. System.out.println("Set up before class");
14. }
15.
16. @Before
17. public void setUp() throws Exception {
18. System.out.println("Set up");
19. }
20.
21. @Test
22. public void testMathPow() {
23. System.out.println("Test Math.pow");
24. Assert.assertEquals(4.0, Math.pow(2.0, 2.0), 0.0);
25. }
26.
27. @Test
28. public void testMathMin() {
29. System.out.println("Test Math.min");
30. Assert.assertEquals(2.0, Math.min(2.0, 4.0), 0.0);
31. }
32.
33. // ÆÚÍû´Ë·½·¨Å׳öNullPointerExceptionÒì³£
34. @Test(expected = NullPointerException.class)
35. public void testException() {
36. System.out.println("Test exception");
37. Object obj = null;
38. obj.toString();
39. }
40.
41. // ºöÂԴ˲âÊÔ·½·¨
42. @Ignore
43. @Test
44. public void testMathMax() {
45. Assert.fail("ûÓÐʵÏÖ");
46. }
47. // ʹÓá°¼ÙÉ衱À´ºöÂÔ²âÊÔ·½·¨
48. @Test
49. public void testAssume(){
50. System.out.println("Test assume");
51. // µ±¼ÙÉèʧ°Üʱ£¬Ôò»áÍ£Ö¹ÔËÐУ¬µ«Õâ²¢²»»áÒâζ²âÊÔ·½·¨Ê§°Ü¡£
52. Assume.assumeTrue(false);
53. Assert.fail("ûÓÐʵÏÖ");
54. }
55.
56. @After
57. public void tearDown() throws Exception {
58. System.out.println("Tear down");
59. }
60.
61. @AfterClass
62. public static void tearDownAfterClass() {
63. System.out.println("Tear down After class");
64. }
65.
66.}

Èç¹ûϸÐĵϰ£¬»á·¢ÏÖJunit3µÄpackageÊÇjunit.framework£¬¶øJunit4ÊÇorg.junit¡£

Ö´ÐдËÓÃÀýºó£¬¿ØÖÆÌ¨»áÊä³ö

дµÀ

Set up before class
Set up
Test Math.pow
Tear down
Set up
Test Math.min
Tear down
Set up
Test exception
Tear down
Set up
Test assume
Tear down
Tear down After class

¿ÉÒÔ¿´µ½£¬Ö´ÐдÎÐòÊÇ@BeforeClass -> @Before -> @Test -> @After -> @Before -> @Test -> @After -> @AfterClass¡£@Ignore»á±»ºöÂÔ¡£

ÔËÐвâÊÔ·½·¨

ÓëJunit3ÀàËÆ£¬¿ÉÒÔÔÚEclipseÖÐÔËÐУ¬Ò²¿ÉÒÔͨ¹ýmvn testÃüÁîÔËÐС£

Assert

Junit3ºÍJunit4¶¼ÌṩÁËÒ»¸öAssertÀࣨËäÈ»package²»Í¬£¬µ«ÊÇ´óÖ²¶à£©¡£AssertÀàÖж¨ÒåÁ˺ܶྲ̬·½·¨À´½øÐжÏÑÔ¡£ÁбíÈçÏ£º

?assertTrue(String message, boolean condition) 񻂗condition == true
?assertFalse(String message, boolean condition) 񻂗condition == false
?fail(String message) ±ØÈ»Ê§°Ü£¬Í¬ÑùÒªÇó´úÂë²»¿É´ï
?assertEquals(String message, XXX expected,XXX actual) 񻂗expected.equals(actual)
?assertArrayEquals(String message, XXX[] expecteds,XXX [] actuals) 񻂗expected.equalsArray(actual)
?assertNotNull(String message, Object object) 񻂗object!=null
?assertNull(String message, Object object) 񻂗object==null
?assertSame(String message, Object expected, Object actual) 񻂗expected == actual
?assertNotSame(String message, Object unexpected,Object actual) 񻂗expected != actual
?assertThat(String reason, T actual, Matcher matcher) 񻂗matcher.matches(actual) == true

Mock/Stub

MockºÍStubÊÇÁ½ÖÖ²âÊÔ´úÂ빦Äܵķ½·¨¡£Mock²âÖØÓÚ¶Ô¹¦ÄܵÄÄ£Äâ¡£Stub²âÖØÓÚ¶Ô¹¦ÄܵIJâÊÔÖØÏÖ¡£±ÈÈç¶ÔÓÚList½Ó¿Ú£¬Mock»áÖ±½Ó¶ÔList½øÐÐÄ£Ä⣬¶øStub»áн¨Ò»¸öʵÏÖÁËListµÄTestList£¬ÔÚÆäÖбàд²âÊԵĴúÂë¡£

Ç¿ÁÒ½¨ÒéÓÅÏÈÑ¡ÔñMock·½Ê½£¬ÒòΪMock·½Ê½Ï£¬Ä£Äâ´úÂëÓë²âÊÔ´úÂë·ÅÔÚÒ»Æð£¬Ò×¶ÁÐԺ㬶øÇÒÀ©Õ¹ÐÔ¡¢Áé»îÐÔ¶¼±ÈStubºÃ¡£

±È½ÏÁ÷ÐеÄMockÓУº

JMock

EasyMock

Mockito

powermock

ÆäÖÐEasyMockºÍMockito¶ÔÓÚJava½Ó¿ÚʹÓýӿڴúÀíµÄ·½Ê½À´Ä£Ä⣬¶ÔÓÚJavaÀàʹÓü̳еķ½Ê½À´Ä£Ä⣨Ҳ¼´»á´´½¨Ò»¸öеÄClassÀࣩ¡£MockitoÖ§³Öspy·½Ê½£¬¿ÉÒÔ¶ÔʵÀý½øÐÐÄ£Äâ¡£µ«ËüÃǶ¼²»ÄܶԾ²Ì¬·½·¨ºÍfinalÀà½øÐÐÄ£Ä⣬powermockͨ¹ýÐÞ¸Ä×Ö½ÚÂëÀ´Ö§³ÖÁ˴˹¦ÄÜ¡£

EasyMock

IBMÉÏÓм¸Æª½éÉÜEasyMockʹÓ÷½·¨ºÍÔ­ÀíµÄÎÄÕ£ºEasyMock ʹÓ÷½·¨ÓëÔ­ÀíÆÊÎö£¬Ê¹Óà EasyMock ¸üÇáËɵؽøÐвâÊÔ¡£

EasyMock°Ñ²âÊÔ¹ý³Ì·ÖΪÈý²½£ºÂ¼ÖÆ¡¢ÔËÐвâÊÔ´úÂë¡¢ÑéÖ¤ÆÚÍû¡£

Â¼ÖÆ¹ý³Ì´ó¸Å¾ÍÊÇ£ºÆÚÍûmethod(params)Ö´ÐÐtimes´Î£¨Ä¬ÈÏÒ»´Î£©£¬·µ»Øresult£¨¿ÉÑ¡£©£¬Å׳öexceptionÒì³££¨¿ÉÑ¡£©¡£

ÑéÖ¤ÆÚÍû¹ý³Ì½«»á¼ì²é·½·¨µÄµ÷ÓôÎÊý¡£

Ò»¸ö¼òµ¥µÄÑùÀýÊÇ£º

@Test  
2.public void testListInEasyMock() {
3. List list = EasyMock.createMock(List.class);
4. // Â¼ÖÆ¹ý³Ì
5.
6. // ÆÚÍû·½·¨list.set(0,1)Ö´ÐÐ2´Î£¬·µ»Ønull£¬²»Å׳öÒì³£
7. expect1: EasyMock.expect(list.set(0, 1)).andReturn(null).times(2);
8. // ÆÚÍû·½·¨list.set(0,1)Ö´ÐÐ1´Î£¬·µ»Ønull£¬²»Å׳öÒì³£
9. expect2: EasyMock.expect(list.set(0, 1)).andReturn(1);
10.
11. // Ö´ÐвâÊÔ´úÂë
12. EasyMock.replay(list);
13. // Ö´ÐÐlist.set(0,1)£¬Æ¥Åäexpect1ÆÚÍû£¬»á·µ»Ønull
14. Assert.assertNull(list.set(0, 1));
15. // Ö´ÐÐlist.set(0,1)£¬Æ¥Åäexpect1£¨ÒòΪexpect1ÆÚÍûÖ´Ðд˷½·¨2´Î£©£¬»á·µ»Ønull
16. Assert.assertNull(list.set(0, 1));
17. // Ö´ÐÐlist.set(0,1)£¬Æ¥Åäexpect2£¬»á·µ»Ø1
18. Assert.assertEquals(1, list.set(0, 1));
19.
20. // ÑéÖ¤ÆÚÍû
21. EasyMock.verify(list);
22.}

EasyMock»¹Ö§³ÖÑϸñµÄ¼ì²é£¬ÒªÇóÖ´Ðеķ½·¨´ÎÐòÓëÆÚÍûµÄÍêȫһÖ¡£

Mockito

MockitoÊÇGoogle CodeÉϵÄÒ»¸ö¿ªÔ´ÏîÄ¿£¬ApiÏà¶ÔÓÚEasyMock¸üºÃÓѺá£ÓëEasyMock²»Í¬µÄÊÇ£¬MockitoûÓÐÂ¼ÖÆ¹ý³Ì£¬Ö»ÐèÒªÔÚ¡°ÔËÐвâÊÔ´úÂ롱֮ǰ¶Ô½Ó¿Ú½øÐÐStub£¬Ò²¼´ÉèÖ÷½·¨µÄ·µ»ØÖµ»òÅ׳öµÄÒì³££¬È»ºóÖ±½ÓÔËÐвâÊÔ´úÂ룬ÔËÐÐÆÚ¼äµ÷ÓÃMockµÄ·½·¨£¬»á·µ»ØÔ¤ÏÈÉèÖõķµ»ØÖµ»òÅ׳öÒì³££¬×îºóÔÙ¶Ô²âÊÔ´úÂë½øÐÐÑéÖ¤¡£¿ÉÒԲ鿴´ËÎÄÕÂÁ˽âÁ½ÕߵIJ»Í¬¡£

¹Ù·½ÌṩÁ˺ܶàÑùÀý£¬»ù±¾ÉϰüÀ¨ÁËËùÓй¦ÄÜ£¬¿ÉÒÔÈ¥¿´¿´¡£

ÕâÀï´Ó¹Ù·½ÑùÀýÖÐժ¼¼¸¸öµäÐ͵ģº

ÑéÖ¤µ÷ÓÃÐÐΪ

import static org.mockito.Mockito.*;  
2.
3.//´´½¨Mock
4.List mockedList = mock(List.class);
5.
6.//ʹÓÃMock¶ÔÏó
7.mockedList.add("one");
8.mockedList.clear();
9.
10.//ÑéÖ¤ÐÐΪ
11.verify(mockedList).add("one");
12.verify(mockedList).clear();

¶ÔMock¶ÔÏó½øÐÐStub

//Ò²¿ÉÒÔMock¾ßÌåµÄÀ࣬¶ø²»½ö½öÊÇ½Ó¿Ú  
2.LinkedList mockedList = mock(LinkedList.class);
3.
4.//Stub
5.when(mockedList.get(0)).thenReturn("first"); // ÉèÖ÷µ»ØÖµ
6.when(mockedList.get(1)).thenThrow(new RuntimeException()); // Å׳öÒì³£
7.
8.//µÚÒ»¸ö»á´òÓ¡ "first"
9.System.out.println(mockedList.get(0));
10.
11.//½ÓÏÂÀ´»áÅ׳öruntimeÒì³£
12.System.out.println(mockedList.get(1));
13.
14.//½ÓÏÂÀ´»á´òÓ¡"null",ÕâÊÇÒòΪûÓÐstub get(999)
15.System.out.println(mockedList.get(999));
16.
17.// ¿ÉÒÔÑ¡ÔñÐÔµØÑéÖ¤ÐÐΪ£¬±ÈÈçÖ»¹ØÐÄÊÇ·ñµ÷Óùýget(0)£¬¶ø²»¹ØÐÄÊÇ·ñµ÷Óùýget(1)
18.verify(mockedList).get(0);

´úÂ븲¸ÇÂÊ

±È½ÏÁ÷ÐеŤ¾ßÊÇEmmaºÍJacoco,Ecliplse²å¼þÓÐeclemma¡£eclemma2.0֮ǰ²ÉÓõÄÊÇEmma£¬Ö®ºó²ÉÓõÄÊÇJacoco¡£ÕâÀïÖ÷Òª½éÉÜÒ»ÏÂJacoco¡£EclmamaÓÉÓÚÊÇEclipse²å¼þ£¬ËùÒԷdz£Ò×Ó㬾Ͳ»¶à×ö½éÉÜÁË¡£

Jacoco

Jacoco¿ÉÒÔǶÈëµ½Ant¡¢MavenÖУ¬Ò²¿ÉÒÔʹÓÃJava Agent¼¼Êõ¼à¿ØÈÎÒâJava³ÌÐò£¬Ò²¿ÉÒÔʹÓÃJava ApiÀ´¶¨Öƹ¦ÄÜ¡£
Jacoco»á¼à¿ØJVMÖеĵ÷Óã¬Éú³É¼à¿Ø½á¹û£¨Ä¬Èϱ£´æÔÚjacoco.execÎļþÖУ©£¬È»ºó·ÖÎö´Ë½á¹û£¬ÅäºÏÔ´´úÂëÉú³É¸²¸ÇÂʱ¨¸æ¡£ÐèҪעÒâµÄÊÇ£º¼à¿ØºÍ·ÖÎöÕâÁ½²½£¬±ØÐëʹÓÃÏàͬµÄClassÎļþ£¬·ñÔòÓÉÓÚClass²»Í¬£¬¶øÎÞ·¨¶¨Î»µ½¾ßÌåµÄ·½·¨£¬µ¼Ö¸²¸ÇÂʾùΪ0%¡£

Java AgentǶÈë

Ê×ÏÈ£¬ÐèÒªÏÂÔØjacocoagent.jarÎļþ£¬È»ºóÔÚJava³ÌÐòÆô¶¯²ÎÊýºóÃæ¼ÓÉÏ -javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]£¬¾ßÌåµÄoptions¿ÉÒÔÔÚ´ËÒ³ÃæÕÒµ½¡£Ä¬ÈÏ»áÔÚJVM¹Ø±Õʱ£¨×¢Òâ²»ÄÜÊÇkill -9£©£¬Êä³ö¼à¿Ø½á¹ûµ½jacoco.execÎļþÖУ¬Ò²¿ÉÒÔͨ¹ýsocketÀ´ÊµÊ±µØÊä³ö¼à¿Ø±¨¸æ£¨¿ÉÒÔÔÚExample´úÂëÖÐÕÒµ½¼òµ¥ÊµÏÖ£©¡£

Java Report

¿ÉÒÔʹÓÃAnt¡¢Mvn»òEclipseÀ´·ÖÎöjacoco.execÎļþ£¬Ò²¿ÉÒÔͨ¹ýAPIÀ´·ÖÎö¡£

public void createReport() throws Exception {  
2. // ¶ÁÈ¡¼à¿Ø½á¹û
3. final FileInputStream fis = new FileInputStream(new File("jacoco.exec"));
4. final ExecutionDataReader executionDataReader = new ExecutionDataReader(fis);
5. // Ö´ÐÐÊý¾ÝÐÅÏ¢
6. ExecutionDataStore executionDataStore = new ExecutionDataStore();
7. // »á»°ÐÅÏ¢
8. SessionInfoStore sessionInfoStore = new SessionInfoStore();
9.
10. executionDataReader.setExecutionDataVisitor(executionDataStore);
11. executionDataReader.setSessionInfoVisitor(sessionInfoStore);
12.
13. while (executionDataReader.read()) {
14. }
15.
16. fis.close();
17.
18. // ·ÖÎö½á¹¹
19. final CoverageBuilder coverageBuilder = new CoverageBuilder();
20. final Analyzer analyzer = new Analyzer(executionDataStore, coverageBuilder);
21.
22. // ´«Èë¼à¿ØÊ±µÄClassÎļþĿ¼£¬×¢Òâ±ØÐëÓë¼à¿ØÊ±µÄÒ»Ñù
23. File classesDirectory = new File("classes");
24. analyzer.analyzeAll(classesDirectory);
25.
26. IBundleCoverage bundleCoverage = coverageBuilder.getBundle("Title");
27. // Êä³ö±¨¸æ
28. File reportDirectory = new File("report"); // ±¨¸æËùÔÚµÄĿ¼
29. final HTMLFormatter htmlFormatter = new HTMLFormatter(); // HTML¸ñʽ
30. final IReportVisitor visitor = htmlFormatter.createVisitor(new FileMultiReportOutput(reportDirectory));
31. // ±ØÐëÏȵ÷ÓÃvisitInfo
32. visitor.visitInfo(sessionInfoStore.getInfos(), executionDataStore.getContents());
33. File sourceDirectory = new File("src"); // Ô´´úÂëĿ¼
34. // ±éÀúËùÓеÄÔ´´úÂë
35. // Èç¹û²»Ö´Ðд˹ý³Ì£¬ÔòÔÚ±¨¸æÖÐÖ»ÄÜ¿´µ½·½·¨Ãû£¬µ«ÊÇÎÞ·¨²é¿´¾ßÌåµÄ¸²¸Ç£¨ÒòΪûÓÐÔ´´úÂëÒ³Ãæ£©
36. visitor.visitBundle(bundleCoverage, new DirectorySourceFileLocator(sourceDirectory, "utf-8", 4));
37. // Ö´ÐÐÍê±Ï
38. visitor.visitEnd();
39.}
   
5846 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

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

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

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

LoadRunnerÐÔÄܲâÊÔ»ù´¡
Èí¼þ²âÊÔ½á¹û·ÖÎöºÍÖÊÁ¿±¨¸æ
ÃæÏò¶ÔÏóÈí¼þ²âÊÔ¼¼ÊõÑо¿
Éè¼Æ²âÊÔÓÃÀýµÄËÄÌõÔ­Ôò
¹¦ÄܲâÊÔÖйÊÕÏÄ£Ð͵Ľ¨Á¢
ÐÔÄܲâÊÔ×ÛÊö

ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
²âÊÔ¹ý³ÌÓëÍŶӹÜÀí
LoadRunner½øÐÐÐÔÄܲâÊÔ
WEBÓ¦ÓõÄÈí¼þ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
°×ºÐ²âÊÔ·½·¨Óë¼¼Êõ

ij²©²ÊÐÐÒµ Êý¾Ý¿â×Ô¶¯»¯²âÊÔ
IT·þÎñÉÌ Web°²È«²âÊÔ
IT·þÎñÉÌ ×Ô¶¯»¯²âÊÔ¿ò¼Ü
º£º½¹É·Ý µ¥Ôª²âÊÔ¡¢Öع¹
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀý·ÖÎö
»¥ÁªÍøweb²âÊÔ·½·¨Óëʵ¼ù
»ùÓÚSeleniumµÄWeb×Ô¶¯»¯²âÊÔ