我正在用Junit写一个ParametrizedTest,这个测试的参数来自一个枚举源代码。
我想用这个枚举构造一个对象,并让模拟方法返回这个对象。
但是,当我试图这样做时,我得到(我认为是)一个不相关的错误消息。
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced or misused argument matcher detected here:
You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))
下面是代码:
第一个
我怀疑输入应该不是any()
,所以我创建了一个为测试提供数据的方法,并使用了@MethodSource注解。
该方法将输入的参数返回给mock,并期望mock返回。
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mocked
MockedObject mockedObject;
@InjectMocks
Foo underTest
@ParameterizedTest
@MethodSource("dataProvider")
public void test_ParametrizedTest(MockedInput mockedInput, Output expectedReturn) {
Output expectedReturn = Output.builder().code(enum).build();
// Given
when(mockedObject.method(mockedInput))
.thenReturn(expectedReturn);
// when
val result = underTest.method();
// then
assertEquas(enum, result.getCode())
}
private static Stream<Arguments> dataProvider() {
return Stream.of(
Arguments.of(mockedInput1, Output.builder().code(CodeEnum.S1).build()),
Arguments.of(mockedInput2, Output.builder().code(CodeEnum.S2).build())
)
}
}
如何使模拟对象从参数化测试返回参数?
1条答案
按热度按时间4smxwvx51#
我使用的运行程序不正确。我把它改成了使用MockitoExtension,测试运行得很好。