所以,我有一个方法接受一个 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/