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

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

10
วิธีการจำลองโมฆะด้วย Mockito
วิธีการเยาะเย้ยวิธีการที่มีประเภทผลตอบแทนเป็นโมฆะ? ฉันใช้รูปแบบการสังเกตการณ์ แต่ไม่สามารถเยาะเย้ยกับ Mockito ได้เพราะฉันไม่รู้ว่าจะทำอย่างไร และฉันพยายามค้นหาตัวอย่างบนอินเทอร์เน็ต แต่ไม่ประสบความสำเร็จ ชั้นเรียนของฉันมีลักษณะเช่นนี้: public class World { List<Listener> listeners; void addListener(Listener item) { listeners.add(item); } void doAction(Action goal,Object obj) { setState("i received"); goal.doAction(obj); setState("i finished"); } private string state; //setter getter state } public class WorldTest implements Listener { @Test public void word{ World w= …


5
วิธีการตรวจสอบว่าวิธีการเฉพาะไม่ได้เรียกว่าใช้ Mockito?
วิธีการตรวจสอบว่าวิธีการไม่ได้เรียกว่าการพึ่งพาของวัตถุ? ตัวอย่างเช่น: public interface Dependency { void someMethod(); } public class Foo { public bar(final Dependency d) { ... } } ด้วยการทดสอบฟู: public class FooTest { @Test public void dependencyIsNotCalled() { final Foo foo = new Foo(...); final Dependency dependency = mock(Dependency.class); foo.bar(dependency); **// verify here that someMethod was not …
625 java  tdd  mockito 


6
Mockito สามารถจับข้อโต้แย้งของวิธีที่เรียกหลาย ๆ ครั้งได้หรือไม่?
ฉันมีวิธีที่ได้รับการเรียกสองครั้งและฉันต้องการจับอาร์กิวเมนต์ของการเรียกใช้เมธอดที่สอง นี่คือสิ่งที่ฉันได้ลอง: ArgumentCaptor<Foo> firstFooCaptor = ArgumentCaptor.forClass(Foo.class); ArgumentCaptor<Foo> secondFooCaptor = ArgumentCaptor.forClass(Foo.class); verify(mockBar).doSomething(firstFooCaptor.capture()); verify(mockBar).doSomething(secondFooCaptor.capture()); // then do some assertions on secondFooCaptor.getValue() แต่ฉันได้รับTooManyActualInvocationsข้อยกเว้นเนื่องจาก Mockito คิดว่าdoSomethingควรเรียกเพียงครั้งเดียว ฉันจะตรวจสอบข้อโต้แย้งของการโทรครั้งที่สองได้doSomethingอย่างไร?

5
ใช้ Mockito เพื่อจำลองวิธีการ แต่ไม่ใช่วิธีอื่น
มีวิธีใดบ้างที่ใช้ Mockito เพื่อเยาะเย้ยวิธีการบางอย่างในชั้นเรียน แต่ไม่ใช่วิธีอื่น ๆ ? ตัวอย่างเช่นในStockชั้นเรียนนี้ (ประดิษฐ์ขึ้นแล้ว) ฉันต้องการจำลองgetPrice()และgetQuantity()คืนค่า (ตามที่แสดงในตัวอย่างการทดสอบด้านล่าง) แต่ฉันต้องการgetValue()ให้ทำการคูณตามรหัสในStockชั้นเรียน public class Stock { private final double price; private final int quantity; Stock(double price, int quantity) { this.price = price; this.quantity = quantity; } public double getPrice() { return price; } public int getQuantity() { return quantity; } public …
402 java  mocking  mockito 

2
Mockito ทดสอบวิธีการโมฆะพ่นข้อยกเว้น
ฉันมีวิธีที่มีvoidประเภทผลตอบแทน นอกจากนี้ยังสามารถโยนข้อยกเว้นจำนวนหนึ่งได้ดังนั้นฉันต้องการทดสอบข้อยกเว้นที่ถูกโยนทิ้งไป ความพยายามทั้งหมดล้มเหลวด้วยเหตุผลเดียวกัน: วิธีการเมื่อ (T) ในประเภท Stubber ไม่สามารถใช้ได้กับข้อโต้แย้ง (เป็นโมฆะ) ความคิดใดที่ฉันจะได้รับวิธีการโยนข้อยกเว้นที่ระบุ doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

11
การจำลองวิธีแบบคงที่ด้วย Mockito
ฉันได้เขียนโรงงานเพื่อผลิตjava.sql.Connectionสิ่งของ: public class MySQLDatabaseConnectionFactory implements DatabaseConnectionFactory { @Override public Connection getConnection() { try { return DriverManager.getConnection(...); } catch (SQLException e) { throw new RuntimeException(e); } } } ฉันต้องการตรวจสอบความถูกต้องของพารามิเตอร์ที่ส่งไปยังDriverManager.getConnectionแต่ฉันไม่ทราบวิธีการจำลองวิธีแบบคงที่ ฉันใช้ JUnit 4 และ Mockito สำหรับเคสทดสอบของฉัน มีวิธีที่ดีในการเยาะเย้ย / ตรวจสอบกรณีการใช้งานที่เฉพาะเจาะจงนี้หรือไม่?

9
Mockito: การพยายามสอดแนมวิธีกำลังเรียกใช้วิธีดั้งเดิม
ฉันใช้ Mockito 1.9.0 ฉันต้องการจำลองพฤติกรรมสำหรับวิธีการหนึ่งของชั้นเรียนในการทดสอบ JUnit ดังนั้นฉันมี final MyClass myClassSpy = Mockito.spy(myInstance); Mockito.when(myClassSpy.method1()).thenReturn(myResults); ปัญหาคือในบรรทัดที่สองmyClassSpy.method1()กำลังถูกเรียกใช้จริงส่งผลให้เกิดข้อยกเว้น เหตุผลเดียวที่ฉันใช้ mocks คือเพื่อที่ในภายหลังเมื่อใดก็ตามที่myClassSpy.method1()มีการเรียกวิธีการจริงจะไม่ถูกเรียกและmyResultsวัตถุจะถูกส่งกลับ MyClassเป็นอินเทอร์เฟซและmyInstanceเป็นการนำไปปฏิบัติหากสิ่งนั้นสำคัญ ฉันต้องทำอะไรเพื่อแก้ไขพฤติกรรมการสอดแนมนี้
352 java  junit  mockito 

7
Mockito: วิธีการตรวจสอบวิธีการถูกเรียกบนวัตถุที่สร้างขึ้นภายในวิธี?
ฉันใหม่กับ Mockito จากคลาสด้านล่างฉันจะใช้ Mockito เพื่อตรวจสอบว่าsomeMethodถูกเรียกใช้หลังจากfooถูกเรียกได้อย่างไร public class Foo { public void foo(){ Bar bar = new Bar(); bar.someMethod(); } } ฉันต้องการโทรยืนยันดังต่อไปนี้ verify(bar, times(1)).someMethod(); ที่เป็นเช่นล้อเลียนของbarBar

1
วิธียืนยันวิธีเรียกสองครั้งด้วยการตรวจสอบ mockito ()
ฉันต้องการตรวจสอบว่าวิธีการใดเรียกอย่างน้อยหนึ่งครั้งผ่านการตรวจสอบ mockito ฉันใช้การตรวจสอบและมันบ่นเช่นนี้: org.mockito.exceptions.verification.TooManyActualInvocations: Wanted 1 time: But was 2 times. Undesired invocation:
307 junit  mockito  verify 

4
Mockito สามารถตั้งวิธีโดยไม่คำนึงถึงข้อโต้แย้งได้หรือไม่?
ฉันพยายามทดสอบรหัสดั้งเดิมโดยใช้ Mockito ฉันต้องการ stub a FooDaoที่ใช้ในการผลิตดังนี้: foo = fooDao.getBar(new Bazoo()); ฉันเขียนได้: when(fooDao.getBar(new Bazoo())).thenReturn(myFoo); แต่ปัญหาที่ชัดเจนgetBar()คือไม่เคยถูกเรียกด้วยBazooวัตถุเดียวกันกับที่ฉัน stubbed วิธีการ (สาปแช่งnewผู้ประกอบการนั้น!) ฉันจะรักมันถ้าฉันสามารถ stub วิธีในวิธีที่มันกลับmyFooโดยไม่คำนึงถึงการโต้แย้ง ความล้มเหลวนั้นฉันจะฟังคำแนะนำการแก้ปัญหาอื่น ๆ แต่ฉันอยากจะหลีกเลี่ยงการเปลี่ยนรหัสการผลิตจนกว่าจะครอบคลุมการทดสอบที่สมเหตุสมผล


9
การใช้ Mockito กับการโทรหลายวิธีด้วยวิธีเดียวกันกับอาร์กิวเมนต์เดียวกัน
มีวิธีให้ stubbed วิธีการคืนค่าวัตถุต่าง ๆ ในการร้องขอต่อไป? ฉันต้องการทำสิ่งนี้เพื่อทดสอบคำตอบที่ไม่ExecutorCompletionServiceสิ้นสุดจาก คือการทดสอบโดยไม่คำนึงถึงลำดับการส่งคืนของวิธีการผลลัพธ์ยังคงที่ รหัสที่ฉันต้องการทดสอบมีลักษณะเช่นนี้ // Create an completion service so we can group these tasks together ExecutorCompletionService<T> completionService = new ExecutorCompletionService<T>(service); // Add all these tasks to the completion service for (Callable<T> t : ts) completionService.submit(request); // As an when each call finished, add it to …
289 java  mocking  mockito 

23
ฉีด Mockito mocks ลงใน Spring bean
ฉันต้องการฉีดวัตถุจำลอง Mockito ลงในถั่ว Spring (3+) เพื่อวัตถุประสงค์ในการทดสอบหน่วยกับ JUnit ขณะนี้การพึ่งพาถั่วของฉันถูกฉีดโดยใช้@Autowiredคำอธิบายประกอบในฟิลด์สมาชิกส่วนตัว ฉันได้พิจารณาการใช้ReflectionTestUtils.setFieldแต่อินสแตนซ์ bean ที่ฉันต้องการฉีดเป็นจริงพร็อกซีและดังนั้นจึงไม่ประกาศเขตข้อมูลสมาชิกส่วนตัวของคลาสเป้าหมาย ฉันไม่ต้องการสร้าง setter สาธารณะเพื่อการพึ่งพาเนื่องจากฉันจะทำการปรับเปลี่ยนอินเตอร์เฟสของฉันอย่างหมดจดเพื่อวัตถุประสงค์ในการทดสอบ ฉันได้ทำตามคำแนะนำของชุมชน Spring แล้ว แต่การเยาะเย้ยไม่ได้เกิดขึ้นและการเดินสายอัตโนมัติล้มเหลว: <bean id="dao" class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.package.Dao" /> </bean> ข้อผิดพลาดที่ฉันพบในขณะนี้มีดังนี้: ... Caused by: org...NoSuchBeanDefinitionException: No matching bean of type [com.package.Dao] found for dependency: expected at least 1 bean which qualifies as autowire candidate …

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