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



因此,我有一个方法,它接受Object参数,并根据其值调用不同的方法(我使用just-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和mockito2api进行了测试。

@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();
}
}
}

验证部分看起来相当难看,所以我不确定这是否值得做

应该可以将验证部分作为另一个参数传递给测试,但这并不能让它变得更好。

最新更新