【发布时间】:2016-03-24 08:43:14
【问题描述】:
我无法从 mockito 模拟任何东西(静态或非静态方法),
这些是我的课,
Calculations.java
public class Calculations {
public void printZero() {
System.out.println("zero");
}
public static void printOne() {
System.out.println("one");
}
}
这是我的 PostData.java
public class PostData {
public static Calculations calc = new Calculations();
public static void postTheData() {
calc.printZero();
Calculations.printOne();
}
}
单元测试类, 测试类.java
public class TestClass {
@Test
public void addTest() {
Calculations lmock = mock(Calculations.class);
// can't have Calculations.calc.printZero() in when() :cause: argument passes to when() must be a mock object.
doNothing().when(lmock).printZero();
// cause: method when(void) is undefined for the type TestClass
// when(lmock.printZero()).doNothing();
// cause: argument passed to when() must be a mock object.
// doNothing().when(Calculations.printOne());
PostData.postTheData();
}
}
它已编译并在我的输出中打印“零”和“一”,理想情况下应该被忽略。
我将 cloud-mockito-all-1.10.19.jar 用于 mockito。 还有junit最新的jar文件。
我知道我在这里遗漏了一些东西,但不知道是什么!如果你能回答我,那将是一个很大的帮助。
【问题讨论】:
-
您实际上并没有使用模拟的
Calculations类 - 您正在使用PostData中的静态类。不过,您需要使用 PowerMockito 来模拟静态方法。 -
“我无法从 mockito 模拟任何东西(静态或非静态方法)” 所以你可以在 mockito 中模拟静态方法,即使它不起作用并且不支持?为此,您需要 PowerMock 之类的其他东西。
标签: java unit-testing junit mockito powermockito