คำถามติดแท็ก mockito

Mockito เป็นกรอบการเยาะเย้ยสำหรับ Java มันเป็นแรงบันดาลใจจาก EasyMock แต่มีจุดมุ่งหมายเพื่อลดความยุ่งยากจำลองการตรวจสอบและการใช้เครื่องมือยิ่งขึ้น

7
ฉันจะล้อเลียนช่อง @Value แบบอัตโนมัติใน Spring ด้วย Mockito ได้อย่างไร
ฉันใช้ Spring 3.1.4 RELEASE และ Mockito 1.9.5 ในชั้นเรียน Spring ของฉันฉันมี: @Value("#{myProps['default.url']}") private String defaultUrl; @Value("#{myProps['default.password']}") private String defaultrPassword; // ... จากการทดสอบ JUnit ของฉันซึ่งฉันได้ตั้งค่าไว้ดังนี้: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:test-context.xml" }) public class MyTest { ฉันต้องการจำลองค่าสำหรับฟิลด์ "defaultUrl" ของฉัน โปรดทราบว่าฉันไม่ต้องการเยาะเย้ยค่าสำหรับช่องอื่น - ฉันต้องการคงค่าเหล่านั้นไว้ตามที่เป็นจริงเฉพาะฟิลด์ "defaultUrl" โปรดทราบว่าฉันไม่มีเมธอด "setter" ที่ชัดเจน (เช่นsetDefaultUrl) ในชั้นเรียนของฉันและฉันไม่ต้องการสร้างขึ้นเพื่อจุดประสงค์ในการทดสอบเท่านั้น ด้วยสิ่งนี้ฉันจะเยาะเย้ยค่าของฟิลด์นั้นได้อย่างไร

2
Mockito: doAnswer Vs thenReturn
ฉันใช้ Mockito สำหรับการทดสอบหน่วยบริการในภายหลัง ฉันกำลังสับสนเมื่อจะใช้VSdoAnswerthenReturn ใครสามารถช่วยฉันโดยละเอียด? จนถึงตอนนี้ฉันได้ลองใช้thenReturnแล้ว
125 java  mockito 

5
การเปรียบเทียบระหว่าง Mockito กับ JMockit - ทำไม Mockito ถึงได้รับการโหวตว่าดีกว่า JMockit? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ผมตรวจสอบที่เยาะเย้ยกรอบที่จะใช้สำหรับโครงการของฉันและได้แคบลงไปJMockitและMockito ฉันสังเกตว่าMockitoได้รับการโหวตให้เป็น " กรอบงานจำลองที่ดีที่สุดสำหรับ Java " ใน Stackoverflow ในการเปรียบเทียบในลักษณะJMockitของ ' Mocking เครื่องมือเปรียบเทียบเมทริกซ์ ' ก็ปรากฏว่าJMockitมีคุณสมบัติที่แตกต่างกันหลาย ใครมีข้อมูลเฉพาะ (ไม่แสดงความคิดเห็น) เกี่ยวกับสิ่งที่Mockitoสามารถทำได้ซึ่งไม่สามารถทำได้ด้วยJMockitและในทางกลับกัน?

2
Mockito Matchers ทำงานอย่างไร?
Mockito matchers อาร์กิวเมนต์ (เช่นany, argThat, eq, sameและArgumentCaptor.capture()) มีพฤติกรรมแตกต่างกันมากจาก matchers Hamcrest ตัวจับคู่ Mockito มักทำให้เกิด InvalidUseOfMatchersException แม้ว่าจะอยู่ในโค้ดที่ดำเนินการนานหลังจากใช้ตัวจับคู่ก็ตาม ตัวจับคู่ Mockito มองเห็นกฎแปลก ๆ เช่นกำหนดให้ใช้ Mockito matchers สำหรับอาร์กิวเมนต์ทั้งหมดเท่านั้นหากอาร์กิวเมนต์หนึ่งในวิธีการที่กำหนดใช้ตัวจับคู่ Mockito matchers สามารถทำให้เกิด NullPointerException เมื่อแทนที่Answers หรือเมื่อใช้(Integer) any()ฯลฯ การปรับโครงสร้างโค้ดด้วยตัวจับคู่ Mockito ในบางวิธีอาจทำให้เกิดข้อยกเว้นและพฤติกรรมที่ไม่คาดคิดและอาจล้มเหลวทั้งหมด เหตุใด Mockito matchers จึงได้รับการออกแบบเช่นนี้และมีการใช้งานอย่างไร?
122 java  mocking  mockito 

6
การเริ่มต้นวัตถุจำลอง - MockIto
มีหลายวิธีในการเริ่มต้นวัตถุจำลองโดยใช้ MockIto วิธีใดดีที่สุดในบรรดาสิ่งเหล่านี้ 1 public class SampleBaseTestCase { @Before public void initMocks() { MockitoAnnotations.initMocks(this); } 2 @RunWith(MockitoJUnitRunner.class) [แก้ไข] 3. mock(XXX.class); แนะนำหน่อยว่ามีวิธีอื่นที่ดีกว่านี้ไหม ...
122 java  junit  mockito 

5
จำลองการโทรครั้งแรกล้มเหลวการโทรครั้งที่สองสำเร็จ
ฉันต้องการใช้ Mockito เพื่อทดสอบโค้ด (ตัวย่อ) ด้านล่าง ไม่รู้จะบอกยังไงให้ Mockito ล้มเหลวในครั้งแรกแล้วทำครั้งที่สองให้สำเร็จ for(int i = 1; i < 3; i++) { String ret = myMock.doTheCall(); if("Success".equals(ret)) { log.write("success"); } else if ( i < 3 ) { log.write("failed, but I'll try again. attempt: " + i); } else { throw new FailedThreeTimesException(); } } …
119 java  mockito 

2
@RunWith (MockitoJUnitRunner.class) กับ MockitoAnnotations.initMocks (สิ่งนี้)
ในขณะที่เขียนการทดสอบ jUnit4 ใหม่ผมสงสัยว่าจะใช้@RunWith (MockitoJUnitRunner.class) หรือMockitoAnnotations.initMocks (นี้) ฉันสร้างการทดสอบใหม่และวิซาร์ดสร้างการทดสอบโดยอัตโนมัติกับ Runner Javadocs สำหรับ MockitoJUnitRunner ระบุดังต่อไปนี้: เข้ากันได้กับ JUnit 4.4 ขึ้นไปนักวิ่งรุ่นนี้จะเพิ่มพฤติกรรมต่อไปนี้: เริ่มต้น mocks ที่มีคำอธิบายประกอบด้วย Mock ดังนั้นจึงไม่จำเป็นต้องใช้ MockitoAnnotations.initMocks (Object) อย่างชัดเจน Mocks เริ่มต้นก่อนวิธีการทดสอบแต่ละครั้ง ตรวจสอบการใช้งานกรอบหลังจากวิธีการทดสอบแต่ละวิธี ยังไม่ชัดเจนสำหรับฉันว่าการใช้ Runner มีข้อได้เปรียบเหนือวิธีการinitMocks () ที่ฉันใช้ในอดีตหรือไม่ ความคิดเห็นหรือลิงก์ใด ๆ จะได้รับการชื่นชม!
119 java  junit4  mockito 


7
วิธีตรวจสอบการเรียกหลายวิธีด้วยพารามิเตอร์ที่แตกต่างกัน
ฉันมีวิธีการต่อไปนี้ที่ต้องการตรวจสอบพฤติกรรม public void methodToTest(Exception e, ActionErrors errors) { ... errors.add("exception.message", ActionMessageFactory.createErrorMessage(e.toString())); errors.add("exception.detail", ActionMessageFactory.createErrorMessage(e.getStackTrace()[0].toString())); ... } ในชั้นเรียน @Test ของฉันฉันหวังว่าจะทำอะไรแบบนี้เพื่อยืนยันว่าerrors.add()ถูกเรียกด้วย " except.message " และอีกครั้งด้วย "except.detail" verify(errors).add(eq("exception.message"), any(ActionError.class)); verify(errors).add(eq("exception.detail"), any(ActionError.class)); อย่างไรก็ตาม Mockito บ่นดังนี้ Argument(s) are different! Wanted: actionErrors.add( "exception.message", <any> ); Actual invocation has different arguments: actionErrors.add( "exception.detail", org.apache.struts.action.ActionError@38063806 ); ฉันจะบอกให้ Mockito ตรวจสอบทั้งสองค่าได้อย่างไร
116 java  mockito 

2
mockito เมื่อ () การเรียกใช้ทำงานอย่างไร
ให้คำสั่ง Mockito ต่อไปนี้: when(mock.method()).thenReturn(someValue); Mockito ไปเกี่ยวกับการสร้างสิ่งที่เป็นพร็อกซีสำหรับการจำลองอย่างไรเนื่องจากคำสั่ง mock.method () จะส่งค่าส่งคืนไปยังเมื่อ ()? ฉันจินตนาการว่าสิ่งนี้ใช้ CGLib บางอย่าง แต่สนใจที่จะรู้ว่าวิธีนี้ทำได้อย่างไร

13
วิธีแก้ไขข้อยกเว้น Stubbing ที่ไม่จำเป็น
รหัสของฉันมีดังต่อไปนี้ @RunWith(MockitoJUnitRunner.class) public class MyClass { private static final String code ="Test"; @Mock private MyClassDAO dao; @InjectMocks private MyClassService Service = new MyClassServiceImpl(); @Test public void testDoSearch() throws Exception { final String METHOD_NAME = logger.getName().concat(".testDoSearchEcRcfInspections()"); CriteriaDTO dto = new CriteriaDTO(); dto.setCode(code); inspectionService.searchEcRcfInspections(dto); List<SearchCriteriaDTO> summaryList = new ArrayList<SearchCriteriaDTO>(); inspectionsSummaryList.add(dto); when(dao.doSearch(dto)).thenReturn(inspectionsSummaryList);//got error …
107 java  junit  mockito 

6
Mockito: จำลองการเริ่มต้นฟิลด์ส่วนตัว
ฉันจะจำลองตัวแปรฟิลด์ที่กำลังเริ่มต้นในบรรทัดได้อย่างไร class Test { private Person person = new Person(); ... public void testMethod() { person.someMethod(); ... } } ที่นี่ฉันต้องการจำลองperson.someMethod()ขณะทดสอบTest.testMethod()วิธีการที่ฉันต้องการจำลองการเริ่มต้นpersonตัวแปร เบาะแสใด ๆ ? แก้ไข:ฉันไม่ได้รับอนุญาตให้แก้ไขคลาสบุคคล

12
การทดสอบวิธีการส่วนตัวโดยใช้ mockito
ชั้นสาธารณะ A { วิธีโมฆะสาธารณะ (บูลีน b) { ถ้า (b == จริง) วิธีที่ 1 (); อื่น วิธีที่ 2 (); } โมฆะส่วนตัว method1 () {} โมฆะส่วนตัว method2 () {} } ชั้นเรียนสาธารณะ TestA { @ทดสอบ โมฆะสาธารณะ testMethod () { a = เยาะเย้ย (A.class); ก. วิธีการ (จริง); // วิธีการทดสอบเช่นตรวจสอบ (a) .method1 (); } } …
104 java  junit  mockito 

3
การใช้ PowerMockito.whenNew () ไม่ได้รับการเยาะเย้ยและเรียกวิธีการดั้งเดิม
ฉันมีรหัสแบบนี้ด้านล่าง: Class A { public boolean myMethod(someargs) { MyQueryClass query = new MyQueryClass(); Long id = query.getNextId(); // some more code } } Class MyQueryClass { .... public Long getNextId() { //lot of DB code, execute some DB query return id; } } ตอนนี้ฉันกำลังเขียนแบบทดสอบสำหรับ A.myMethod(someargs)เขียนสำหรับการทดสอบ ฉันต้องการข้ามวิธีการจริงquery.getNextId()และส่งคืนค่าต้นขั้วแทน MyQueryClassโดยทั่วไปฉันต้องการที่จะเยาะเย้ย ดังนั้นในกรณีทดสอบของฉันฉันได้ใช้: MyQueryClass query …
104 java  junit  mockito  powermock 

2
วิธีการตรวจสอบวิธีการเรียกวัตถุที่ไม่ใช่จำลอง?
ดูเหมือนว่าม็อกกิโตจะตรวจสอบได้ว่ามีการเรียกใช้วิธีการจำลองวัตถุหรือไม่และวัตถุจำลองมักจะมีบางอย่างเช่นกัน doReturn().when(mock object) แต่ฉันสามารถสร้างวัตถุจำลองและกำหนดdoReturn().when(mock object) แล้วตรวจสอบว่าวิธีการของวัตถุอื่นเรียกว่า? นี่คือสิ่งที่ฉันต้องการทำ: ฉันกำหนด mockEnvironment และตอบกลับไม่ว่าจะเกิดอะไรขึ้น แต่ฉันต้องการตรวจสอบวิธีการต่างๆของ anotherObj ถูกเรียกในกรณีที่แตกต่างกัน ต้องทำอย่างไร? public class BaseClass { private Environment mockEnvironment; @Test public void testcase () { setMockitoEnvironment(); response = foo(mockEnvironment, argument1); verify(anotherObj).codePath1(...); response = foo(mockEnvironment, argument2); verify(anotherObj).codePath2(...); } } //this method successfully return a response with any input //because …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.