使用Mockitos传递参数化的输入

我正在使用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

}

回答:

在JUnit中,参数化测试使用特殊的运行器,以确保多次实例化该测试,因此每种测试方法均被多次调用。Mockito是用于编写特定单元测试的工具,因此没有内置功能可以以不同的Mockito期望多次运行同一测试。

如果要更改测试条件,最好的选择是执行以下一项操作:

使用JUnit参数化测试,并为所需的模拟输入提供参数;

在测试中运行不同参数的循环,不幸的是避免了“每种方法测试一件事”的理念

提取一个实际执行测试的方法,并@Test为每个所需的模拟创建一个新方法。

请注意,没有禁止将模拟对象用作@Parameterized测试参数。如果您希望基于模拟进行参数化,则可以这样做,可能创建模拟并在测试的静态方法中设置期望值。

关于运行程序的注意事项:此参数化测试运行程序与Mockito的MockitoJUnitRunner冲突:每个测试类只能有一个运行程序。如果要同时使用它们,则需要切换到@Before和@After方法或Mockito JUnit4规则进行设置。

例如,从另一个答案压缩而来,该答案解释了有关参数化运行器与JUnit规则的更多信息,并从JUnit4 Parameterized Test doc页面和MockitoRule doc页面中提升:

@RunWith(Parameterized.class)

public class YourComponentTest {

@Rule public MockitoRule rule = MockitoJUnit.rule();

@Mock YourDep mockYourDep;

@Parameters public static Collection<Object[]> data() { /* Return the values */ }

public YourComponentTest(Parameter parameter) { /* Save the parameter to a field */ }

@Test public void test() { /* Use the field value in assertions */ }

}

以上是 使用Mockitos传递参数化的输入 的全部内容, 来源链接: utcz.com/qa/422845.html

回到顶部