我正在测试的课程是ClassA
,其中一个私有方法使用静态工厂(简称CarFactory
)方法getCar(XXX xxx)
,它返回Car
。
CarFactory
逻辑的一部分是验证给定的xxx参数是否符合某些标准。
我尝试使用Mockito,如下所示:
@Mock private Car mockForCar;
@Mock private XXX xxxMock;
...
when(CarFactory.getCar(xxxMock)).thenReturn(mockForCar);
但我得到一个例外,因为CarFactory
xxxMock无效。
为什么要调用真正的getCar(xxx)
方法而不是被调用的方法?
有更好的方法吗?
答案 0 :(得分:0)
来自Mockito FAQ:
我可以模拟静态方法吗?
没有。 Mockito更喜欢面向对象和依赖注入 静态的,程序性的代码很难理解和更改。如果你 处理可怕的遗留代码,您可以使用JMockit或Powermock进行模拟 静态方法。
如果你想使用Mockito存根,你应该使它非静态并注入工厂。无论如何,这是更好的OO设计。