我无法模拟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();
}
}
单元测试班, TestClass.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进行模拟。 和junit的最新jar文件。
我知道我在这里遗漏了一些东西,但无法弄清楚是什么!如果你能回答我,那将是一个很大的帮助。
答案 0 :(得分:2)
问题是PostData
不使用模拟的Calculations
对象。
为了做到这一点,你可以为calc字段添加一个setter(也许可以将其更改为非静态),并将PostData
的{{1}}字段设置为模拟字段。