使用 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
    }

原文由 spal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
2 个回答

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

如果您希望更改测试条件,最好的办法是执行以下操作之一:

  • 使用 JUnit 参数化您的测试,并为您想要的模拟输入提供一个参数;
  • 在测试中运行不同参数的循环,不幸的是,这避免了“每个方法测试一个东西”的理念
  • 提取一个实际执行测试的方法,并为您想要的每个模拟创建一个新的 @Test 方法。

请注意,不禁止使用模拟对象作为 @Parameterized 测试参数。如果您正在寻找基于模拟的参数化,您可以这样做,可能会创建模拟并在测试的静态方法中设置期望。


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

例如,从解释更多关于参数化运行器与 JUnit 规则 的不同答案 压缩,并从 JUnit4 参数化测试 文档页面和 MockitoRule 文档页面提升:

 @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 */ }
}

原文由 Jeff Bowman 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您坚持使用旧版本的 mockito,其中 MockitoRule 不可用,另一种可能性是使用 MockitoAnnotations.initMocks 显式初始化模拟:

 @RunWith(Parameterized.class)
public class YourComponentTest {
    @Mock YourDep mockYourDep;

    @Parameter
    public Parameter parameter;

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

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }

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

原文由 kavai77 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题