java - Mockito异常

标签 java exception junit mockito

有一个测试代码会引发异常,我无法理解 - 为什么?

异常(exception):

    org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 

测试代码:

 @Test
    public void testUpdateBookingFormData() throws Exception {
        when(registrantFormService.getRegistrantFormByUUID(any(String.class))).thenReturn(registrantForm);
        when(bookingService.getById(any(Long.class))).thenReturn(booking);
        when(eventFieldRepository.findByEventIdOrderBySortIndexAsc(any(Long.class))).thenReturn(eventFieldList);
        when(registrantAggregateService.getRegistrantDataAggregate(any(RegistrantKey.class))).thenReturn(registrantAggregate);
        when(bookingFormStrategiesFactory.chooseStrategy(any(Long.class))).thenReturn(bookingFormStrategy);
        when(bookingFormValidatorsFactory.getValidatorForForm(any(Booking.class))).thenReturn(validator);
        when(validator.validate(any(BookingFormBean.class))).thenReturn(true);
        when(bookingFormStrategy.getFormByKey(any(Booking.class), any(RegistrantKey.class))).thenReturn(bookingFormBean);

        BookingFormsCollectionBean bookingFormsCollectionBean = bookingFormsService.updateBookingFormData(eq(booking.getKey().getVisitorId()), anyString(), anyMapOf(String.class, String[].class));

        assertThat(bookingFormsCollectionBean, is(IsNull.notNullValue()));
    }

我做错了什么?

UPD:完整代码http://pastebin.com/rprLG8Nt

UPD2:完整的异常消息:

  org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
1 matchers expected, 3 recorded:
-> at com.evm.front.service.logic.bookingprocess.BookingFormsServiceTest.testUpdateBookingFormData(BookingFormsServiceTest.java:106)
-> at com.evm.front.service.logic.bookingprocess.BookingFormsServiceTest.testUpdateBookingFormData(BookingFormsServiceTest.java:106)
-> at com.evm.front.service.logic.bookingprocess.BookingFormsServiceTest.testUpdateBookingFormData(BookingFormsServiceTest.java:106)

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.


    at com.evm.front.service.logic.bookingprocess.BookingFormsService.updateBookingFormData(BookingFormsService.java:202)
    at com.evm.front.service.logic.bookingprocess.BookingFormsServiceTest.testUpdateBookingFormData(BookingFormsServiceTest.java:106)
    at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
    at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)

最佳答案

异常将我们指向106行。但是该行有两个匹配器,而异常则提示三个。然而,下一个非空行,即 108 行很奇怪:它包含没有 when() 调用的匹配器。您可以尝试使用实际值调用它,如下所示:

BookingFormsCollectionBean bookingFormsCollectionBean = bookingFormsService.
    updateBookingFormData(booking.getKey().getVisitorId(), "salala", Collections.EMPTY_MAP);

您稍后可以使用更具体的数据来进行此测试。

关于java - Mockito异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37409232/

相关文章:

programming-languages - java中带有异常的简单练习

java - 无法执行 Junit 参数化测试执行

java - Swagger 自动配置过程中会扫描哪些类?

c++ - 从 catch block 重新抛出异常时丢失异常类型

java - 如果修改重复列表,则初始列表 gettign 被修改

database - 如何删除具有外键依赖项的重复行?

unit-testing - 如何 Junit 测试 servlet-filters

android - 为什么 Sonar 不在 Jenkins 上读取我的 JUnit XML 结果?

java - 一个简单的Windows批处理文件来运行java

Java Switch 语句,一起使用 case 值?