- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用mockito,并且面临与匹配器参数相关的问题。
我遇到了这个异常:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at com.rccl.middleware.kidsclub.engine.services.RoomServiceTest.findBetweenMinAgeAndMaxAge_roomNot(RoomServiceTest.java:43)
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.
尽管我在所有参数中使用匹配器,但我收到此错误消息,我想这是因为我在 roomService.findByAge
中发送了一个匹配器,但此方法正在调用第二个匹配器findBetweenMinAgeAndMaxAge
并且在下一次调用中内部还有另外两个参数。我不太确定问题的原因以及如何解决它。
这是我的测试:
import com.rccl.middleware.kidsclub.engine.mock.MockDTO;
import com.rccl.middleware.kidsclub.engine.repository.RoomRepository;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.Optional;
import com.rccl.middleware.kidsclub.engine.repository.model.ShipRoom.Room;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;
@RunWith(MockitoJUnitRunner.class)
public class RoomServiceTest {
@Mock
private RoomRepository roomRepository;
@Rule
public final ExpectedException expectedException = ExpectedException.none();
private RoomService roomService;
@Before
public void init() {
this.roomService = new RoomService(roomRepository);
}
@Test()
public void findBetweenMinAgeAndMaxAge_roomNot() {
int numRoomDTO = 3;
Optional<Room> room = Optional.ofNullable(MockDTO.buildRandomRoom(numRoomDTO));
given(roomRepository.findBetweenMinAgeAndMaxAge(any(Integer.class), anyString())).willReturn(room);
roomService.findByAge(any(Integer.class));
}
}
这是 findByAge 方法:
public Optional<RoomDTO> findByAge(int childAge) {
return roomRepository.findBetweenMinAgeAndMaxAge(childAge, DEFAULT_AGGREGATOR_ID)
.map(room -> ObjectMapperUtils.map(room, RoomDTO.class));
}
它是MockDTO类中的助手
public static Room buildRandomRoom(int index) {
return new Room(RandomStringUtils.randomAlphabetic(10),
RandomStringUtils.randomAlphabetic(10),
RandomStringUtils.randomAlphabetic(15),
RandomUtils.nextInt(0, 10),
RandomUtils.nextInt(11, 20));
}
最佳答案
这里:
roomService.findByAge(any(Integer.class));
这是对生产代码的调用,您的测试会“触发”某些 Activity ,然后通过验证某些结果来检查该 Activity ,或者按预期调用某些模拟。
但是:您不能(也不应该)在这里使用该参数匹配器。走吧:
roomService.findByAge(42); // or whatever number makes sense there
换句话说:你提供了一个“真实”的论点。其中之一你“知道”应该发生什么。含义:您调用生产代码,并将特定的“上下文”传递给该调用。根据你的知识“当我通过 42 时,X 应该发生”,然后你验证“是的,X 确实发生了”。
参数匹配器仅在为 Mockito 模拟对象编写规范时使用。例如:参数匹配器根据您的规范匹配传入参数,以做出某种决定。
参数匹配器不会神奇地知道如何创建一个值来传递到方法中。它们的唯一目的是将传入的参数与某些内容进行匹配。当然,他们的签名是以允许您这样编写代码的方式编写的。但这对于在模拟规范中方便地使用参数匹配器是必要的。匹配器并不真正返回值,它们只是接受它们。
关于java - 当我发送匹配器作为参数时,Mockito InvalidUseOfMatchersException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57882054/
我的测试用例出现以下错误: junit.framework.AssertionFailedError: Exception occured : org.mockito.exceptio
我正在使用 java spring boot 并尝试在单元测试中为 AWS s3 存储桶编写模拟。以下是在执行测试时导致一些问题的代码 @Mock AmazonS3 s3client;
我已经尝试调试这段代码一段时间了,但仍然没有成功。我继续专门为此代码抛出“InvalidUseOfMatchersException”: 对于设置: service = mock(Se
import org.mockito.Mockito; public class Scratch2 { public static class Foo { } public interface Cus
我在使用mockito 2.23.4、junit4 和springrunner 测试方法时遇到困难。我不断收到 InvalidUseOfMatchersException 即使代码对我来说看起来非常好
我目前在使用 Mockito 时遇到问题。但首先这是我的代码,它创建了 Mockito 提示的模拟: @Test public void testRestEndpointGeneration(
我有这个 TestNG 测试方法代码: @InjectMocks private FilmeService filmeService = new FilmeServiceImpl(); @Mock p
我正在使用mockito,并且面临与匹配器参数相关的问题。 我遇到了这个异常: org.mockito.exceptions.misusing.InvalidUseOfMatchersExceptio
我正在学习 Android MVP 架构并尝试使用 Mockito/JUnit 测试一些方法。我正在从本教程中学习: https://codelabs.developers.google.com/co
我有以下模拟对象: @Mock ObjectMapper objectMapper = new ObjectMapper(); 然后我写了一些 mock 逻辑,声称我做错了: Mockito.when
我正在使用 mockito 进行测试,但我遇到了这个问题: org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid
我有一组测试来验证我们的 Android 应用程序中的某些功能。部分代码负责将某些字符串放入某些 TextView 中。所以我想创建模拟的 TextView 对象以在测试时使用: public sta
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:在此处检测到错误的参数匹配器: 我在对以下静态方法执行 powermocki
我想模拟我的 PermissionHostCompat 类的操作 requestPermission(@NonNull String Permission, int requestCode) 。 pu
我对mockito完全陌生,我已经尝试了很多在网上找到的解决方案,但我仍然无法解决这个问题。我什至不确定是什么原因造成的。我需要为一个非常成熟的代码创建一个模拟测试,我不允许更改该代码。我需要模拟的代
我有这个测试 @Test public void addVacancy() throws Exception{ Vacancy mockVacancy = Mockito.mock(V
我正在尝试使用mockito的ArgumentCaptor类来捕获一些参数,然后对其进行一些验证。但它抛出了一个异常。 这就是打印的错误消息。 org.mockito.exceptions.misus
我在构建测试的 when-then 部分时遇到了问题。运行测试时出现以下错误。 我已经查看了这个 SO 链接 ( Mockito: InvalidUseOfMatchersException ) 并重
我最近在我的项目中将 Maven Surefire 插件升级到版本 v2.14.1(从 v2.6)。升级后,Mockito 开始在所有 JUnit 测试中抛出 InvalidUseOfMatchers
在我的 JUnit 类中,我有以下代码: @Mock private HttpServletRequest servletRequest; @Mock WidgetHelper widgetHelpe
我是一名优秀的程序员,十分优秀!