Mockito:无法模拟静态&非静态方法

时间:2016-03-24 08:43:15

标签: java unit-testing junit mockito powermockito

我无法模拟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文件。

我知道我在这里遗漏了一些东西,但无法弄清楚是什么!如果你能回答我,那将是一个很大的帮助。

1 个答案:

答案 0 :(得分:2)

问题是PostData不使用模拟的Calculations对象。

为了做到这一点,你可以为calc字段添加一个setter(也许可以将其更改为非静态),并将PostData的{​​{1}}字段设置为模拟字段。