gpt4 book ai didi

java - 使用 Mockitos 传递参数化输入

转载 作者:搜寻专家 更新时间:2023-10-30 19:52:03 24 4
gpt4 key购买 nike

我正在使用 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 中,Parameterized tests使用 a special runner确保多次实例化测试,因此多次调用每个测试方法。 Mockito 是一种用于编写特定单元测试的工具,因此没有内置功能可以根据不同的 Mockito 期望多次运行相同的测试。

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

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

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


运行者注意事项:这Parameterized test runner与 Mockito 的 MockitoJUnitRunner 冲突:每个测试类只能有一个运行者。你会想要切换到 @Before and @After methodsa Mockito JUnit4 rule对于您的设置,如果您同时使用它们。

例如,压缩自a different answer这解释了更多关于参数化运行器与 JUnit 规则和从 JUnit4 Parameterized Test 提升的信息文档页面和 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 */ }
}

关于java - 使用 Mockitos 传递参数化输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com