无法模拟驻留在不同项目中的类的对象

时间:2017-08-10 11:29:09

标签: java mockito

这就是我嘲笑另一个项目中出现的类Client的对象:

@Mock
private Client client;

//Mocking method of class client - 

@Test
public void test()
{
    Mockito.when(client.getPassportDetail(Matchers.eq(bytes),Matchers.eq(properties)))
           .thenReturn(hash);
}

类Client的结构:

class Client
{

    public static boolean loadLibraries(Properties properties) {
    }

    public HashMap<String, String> getPassportDetail(byte[] b, Properties properties) throws Exception{
        if (!loadLibraries(properties)) 
        {
            throw new UnsatisfiedLinkError();
        }
    }

因此,当我模拟getPassportDetail方法时,它会被调用,而不是被模拟。

1 个答案:

答案 0 :(得分:1)

这是一个常见的错误。实际上@Mock注释需要更多工作来实现。

你有3个选择:

添加

@RunWith(MockitoJUnitRunner.class) 

到你的考试班。

或者

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
}

还有第3个选项,@Dawood ibn Kareem在下面的评论中建议:

  

还有第三个选项,它比这两个选项更好。使用新的Mockito规则 - @Rule public MockitoRule rule = MockitoJUnit.rule();.更多细节见my answer here,这也解释了为什么这是三个选项中最好的。

应该是全部。

您可以随时参考http://www.baeldung.com/mockito-annotations获取更多信息和详细说明。