2017-04-23 93 views
0

我开始与Mockito作为我的嘲讽framemork。我尝试嘲笑一些自定义类与它:使用静态初始化块与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不为空,但我在静态块中分配的值未初始化。

+0

这似乎并没有被什么关系的Mockito。如果您在任何一种方法中检查“LoginAttempt.loginAttempt.os”的值,会发生什么情况? –

+0

什么是TEST_GLOBALS?它拼写成一个常量,但不像一个。 –

+0

@LewBloch它包含常量的类。 –

回答

1

尽管知道Mock和Spy之间的区别很好,但真正的原因在于下面的编辑。否则,请参阅What is the difference between mocking and spying when using Mockito?了解有关差异的更多信息。

编辑:我注意到你缺少注释到一个类实现的Mockito:

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

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

我尝试它,接缝它是我正在寻找。我一检查就接受答案。 –

+0

@DawoodibnKareem你是对的,他错过了注释RunWith以启用mockito注释。 – AlexC