我开始以Mockito作为嘲笑框架。我尝试用它模拟一些自定义类:

//usage
@Mock
private LoginAttempt loginAttempt;


LoginAttempt类:

public class LoginAttempt {
    private static LoginAttempt loginAttempt;

    static {
        loginAttempt = new LoginAttempt();
        loginAttempt.setOs(TEST_GLOBALS.OS);
        loginAttempt.setBrowser(TEST_GLOBALS.BROWSER);
        loginAttempt.setDevice(TEST_GLOBALS.DEVICE);
        loginAttempt.setOsVersion(TEST_GLOBALS.OS_VERSION);
        loginAttempt.setBrowserVersion(TEST_GLOBALS.BROWSER_VERSION);
    }
...


但是,当我调试测试用例时,loginAttempt var为空。我究竟做错了什么?

我在教程中看到,我应该做这样的事情:

private static LoginAttempt loginAttempt = new LoginAttempt();


但是,如果我想预先初始化一些字段值怎么办?

编辑我的loginAttempt不为null,但是我在静态块中分配的值未初始化。

最佳答案

虽然很高兴知道Mock和Spy之间的区别,但真正的原因是在下面的编辑中。否则,请参见What is the difference between mocking and spying when using Mockito?以获取有关差异的更多信息。

编辑:我注意到您缺少在类上启用模仿的注释:

@RunWith(MockitoJUnitRunner.class)
public class LoginAttemptTest {
    @Mock
    LoginAttempt loginAttempt;

    @Test
    public void testObjectExistence() {
        System.out.println("loginAttempt="+loginAttempt);
    }
}

10-01 08:18