java - 使用 JUnitParamsRunner 对不同方法的 Mockito.verify() 进行参数化测试

标签 java testing junit mockito parameterized-unit-test

所以,我有一个方法接受一个 Object 参数,并根据它的值调用不同的方法(我只使用 if 语句而不是 switch)。

public class ClassToTest {

    public void methodToTest(String input) {
        if (input.equals("A")) {
            ServiceClass.methodA();
        }
        if (input.contentEquals("B")) {
            ServiceClass.methodB();
        }
        if (input.contentEquals("C")) {
            ServiceClass.methodC();
        }
    }
}
public class ServiceClass {

    public static void methodA() {
        System.out.println("A");
    }

    public static void methodB() {
        System.out.println("B");
    }

    public static void methodC() {
        System.out.println("C");
    }
}

我知道 JUnitParamsRunner 简化了参数化测试的编写,我知道 Mockito.verify() 检查是否调用了特定方法。但就我而言,是否可以对不同的输入进行参数化测试并检查是否调用了相应的方法?还是对于 verify() 我需要为每个场景编写单独的测试。

最佳答案

您似乎想验证 ServiceClass 中的静态方法。在那种情况下,Mockito 无法帮助您,因为它无法处理静态方法。为此,您可能需要使用 PowerMockito

这是一个例子,它看起来像什么。 使用 PowerMockito 2.0.4 和 mockito2 api 进行测试。

@RunWith(PowerMockRunner.class)
@PrepareForTest(ServiceClass.class)
@PowerMockRunnerDelegate(JUnitParamsRunner.class)
public class ParamsTest {

    @Test
    @Parameters({"A", "B", "C"})
    public void test(String input) throws Exception {

        PowerMockito.mockStatic(ServiceClass.class);

        new ClassToTest().methodToTest(input);

        PowerMockito.verifyStatic(ServiceClass.class);

        switch (input) {
            case "A":
                ServiceClass.methodA();
                break;
            case "B":
                ServiceClass.methodB();
                break;
            case "C":
                ServiceClass.methodC();
                break;
            default:
                Assert.fail();
        }
    }
}

验证部分看起来很丑,所以我不确定是否值得这样做。

应该也可以将验证部分作为另一个参数传递给测试,但这并没有真正使它变得更好。

关于java - 使用 JUnitParamsRunner 对不同方法的 Mockito.verify() 进行参数化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58832104/

相关文章:

java - 如何在 java 中使用 mockito 测试文件大小?

java - 将 List<String> 转换为 List<Integer>(或任何扩展 Number 的类)

java - 正交相机和舞台

php - 从目录中为所有类生成测试

ruby-on-rails - 运行在 Rails 4 和 MiniTest 中生成的功能测试时出现 InvalidAuthenticityToken 错误

java - 如何避免重复的 JUnit 测试

java - RunWith 和 ContextConfiguration 奇怪的行为

java - 莫尔斯电码转换器代码返回无效输出

java - com.amazonaws.AmazonClientException : Data read has a different length than the expected

asp.net-mvc - 在已部署站点上使用 teamcity 运行 Nunit 测试