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