我正在使用Mockito进行单元测试。我想知道是否可以像在Junit测试中那样发送参数化的输入参数
例如:
@InjectMocks
MockClass mockClass = new MockClass();
@Test
public void mockTestMethod()
{
mockClass.testMethod(stringInput);
// here I want to pass a list of String inputs
// this is possible in Junit through Parameterized.class..
// wondering if its can be done in Mockito
}
4条答案
按热度按时间gab6jxml1#
在JUnit中,Parameterized tests使用a special runner来确保测试被多次示例化,因此每个测试方法被多次调用。Mockito是一个用于编写特定单元测试的工具,因此没有内置的功能来多次运行具有不同Mockito期望的相同测试。
如果要更改测试条件,最好执行以下操作之一:
@Test
方法。请注意,没有禁止使用mock对象作为
@Parameterized
测试参数。如果您希望基于mock进行参数化,您可以这样做,可能创建mock并在测试的静态方法中设置期望值。关于跑步者的注意事项:此Parameterized test runner与Mockito的MockitoJUnitRunner冲突:每个测试类只能有一个runner。如果同时使用@Before和@After方法或a Mockito JUnit4 rule方法,您将需要切换到这两种方法。
例如,从a different answer压缩,详细说明了参数化runner与JUnit规则,以及从JUnit4 Parameterized Test文档页面与MockitoRule文档页面进行提升:
b5lpy0ml2#
如果您一直使用旧版本的mockito,其中
MockitoRule
不可用,另一种可能性是使用MockitoAnnotations.initMocks
显式初始化mock:vlurs2pr3#
您可以使用JUnitParamsRunner。下面是我的操作方法:
xqnpmsa84#
解决这个问题的方法是:
@ExtendWith(MockitoExtension.class)
的类别层级注解1.使用
@Mock
注解每个模拟对象@InjectMocks
。或者一个用@BeforeEach
注解的setup方法,在这里你初始化了要测试的类。1.如果您需要@test注解,请确保您导入了
org.junit.jupiter.api.Test
。org.junit.test
将不起作用!我用的是mockito第4版。