Для вашего конкретного случая : вы можете использовать PowerMock, чтобы высмеивать System.out
, но, честно говоря, я игнорирую все побочные эффекты, которые он может иметь.
В более общем смысле : то, что вы ищете, называется фиктивный объект и, в основном, позволяет экземпляру Object
ничего не делать, как минимум, чтобы пройти через него.Ваш код.
В вашем случае, издевательство System.out
позволит вам выполнять вызовы на System.out.println()
, фактически не вызывая их.Таким образом, в результате ваш код будет выполняться так, как если бы он был:
public class Helloworld {
/**
* @param args the command line arguments
*/
public static int greetingCnt = 0;
public static void main(String[] args) {
Helloworld helloword = new Helloworld();
helloword.greetWorld();
helloword.greetWorld();
helloword.greetWorld();
// System.out.println("Greating count: " + greetingCnt);
}
public void greetWorld() {
// System.out.println("Hello World!");
++greetingCnt;
//some other computation...
}
Я мог бы пойти дальше, объясняя, как это происходит на самом деле , но я думаю, этого достаточно для вашего ответа.Если вам интересно, вы можете посмотреть на выполнение ваших тестов во время выполнения, чтобы проверить реальный тип ваших поддельных объектов.