इसलिए मैंने जेमॉकिट से मॉकिटो में जाने का फैसला किया और यह मुझे अजीब लगता है मैं समझ नहीं पा रहा हूं कि मॉकिटो में कुछ चीजें कैसे काम करती हैं

मेरे पास वह सरल @BeforeEach विधि है और जब मेरी वस्तुओं का मज़ाक उड़ाया जाता है तो मुझे हमेशा एक शून्य सूचक अपवाद मिलता है

@Mock
public EntityManager entityManager;

@Mock
public TimerSessionBean timerSessionBean;

@Mock
public Client client;

private CaseSetReminder caseSetReminder;

private Request request;
private Message message;

@BeforeEach
final void beforeEach() {
    request = new Request();
    message = new Message();

    String spaceId = "SPACE_ID";
    String threadId = "THREAD_ID";

    caseSetReminder = new CaseSetReminder();
    caseSetReminder.entityManager = entityManager;
    caseSetReminder.timerSessionBean = timerSessionBean;

    ThreadM thread = new ThreadM();

    thread.setName("spaces/" + spaceId + "/thread/" + threadId + "");
    Sender sender = new Sender();
    sender.setName("MyName");
    message.setSender(sender);
    message.setThread(thread);

    Reminder reminder = new Reminder("Do Something", ZonedDateTime.now(ZoneId.of("Europe/Athens")).plusMinutes(10),
            "DisplayName", "Europe/Athens", spaceId, threadId);

    reminder.setReminderId(1);
    timerSessionBean.nextReminderDate = reminder.getWhen();
}

यह हमेशा मुझे फेंकता है

सत्यापित करने के लिए पारित तर्क () TimerSessionBean प्रकार का है और नकली नहीं है!

सुनिश्चित करें कि आपने कोष्ठक को सही ढंग से रखा है!

सही सत्यापन के उदाहरण देखें:

verify(mock).someMethod();

verify(mock, times(10)).someMethod();

verify(mock, atLeastOnce()).someMethod();

लेकिन यह सच नहीं है इसका टाइमर सत्रबीन मज़ाक उड़ाया गया है और मेरा वाक्यविन्यास सही है

और यही वह तरीका है जिसे मैं चलाता हूं जो पहले प्रत्येक विधि को ट्रिगर करता है

@Test
void mockitoTest() throws Exception {

    final String expectedDate = "12/12/2019 12:00 athens";
    message.setText("remind me ' set next reminder Test' at " + expectedDate);
    request.setMessage(message);

    // Already set in mock a nextReminder that is to be in 10 mins from now()
    //So this should not be set
    caseSetReminder.setRequest(request);
    caseSetReminder.setReminder();

    //Verifies that setNextReminder is called 0 times because Input reminderDate is AFTER the current
    verify(timerSessionBean , times(1)).setNextReminder(Mockito.any(Reminder.class), Mockito.any(ZonedDateTime.class));

}

मुझे उम्मीद है कि आप लोग इसे समझने में मेरी मदद कर सकते हैं

0
Theodosis 19 फरवरी 2019, 13:31

1 उत्तर

सबसे बढ़िया उत्तर

आपको यह सुनिश्चित करने की ज़रूरत है कि आपने मॉकिटो इंजन में प्रवेश किया है:

@BeforeEach
final void beforeEach() {
  MockitoAnnotations.initMocks(this);
  ..

या

 @RunWith(MockitoJUnitRunner.class) 
 public class TestClass{

इसके अलावा, आप एक नकली वर्ग के फ़ील्ड सेट नहीं कर सकते जैसे:

timerSessionBean.nextReminderDate = reminder.getWhen();

व्यवहार को कॉन्फ़िगर करने के लिए doReturn(), when(), then() का उपयोग करने का प्रयास करें

1
Maciej Kowalski 19 फरवरी 2019, 13:37