【发布时间】:2012-03-12 08:44:56
【问题描述】:
使用 Mockito 或其他类似框架。有没有办法模拟一个包私有类? 我正在尝试测试我的服务层来模拟我的 DAO 类。问题是DAO实例是包私有的,只能通过工厂获取。
MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class);
编译器说无法从包外部访问该类。 你有什么例子吗?
谢谢
【问题讨论】:
使用 Mockito 或其他类似框架。有没有办法模拟一个包私有类? 我正在尝试测试我的服务层来模拟我的 DAO 类。问题是DAO实例是包私有的,只能通过工厂获取。
MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class);
编译器说无法从包外部访问该类。 你有什么例子吗?
谢谢
【问题讨论】:
Mockito 无法做到这一点,它需要修改实际类的字节码。这不是计划中的功能。
您没有最终可以为这些 DAO 模拟的接口吗?
另一种选择是查看 PowerMock,它非常适合处理遗留代码,即当软件设计迫使您模拟静态、私有、最终等时。
【讨论】:
大概,您的问题是您的 SUT(以及它的测试)与您要模拟的类位于不同的包中,否则不会有问题。
我解决这个问题的方法是在测试类中为您要模拟的类编写一个静态实用程序方法。这个实用方法应该只创建并返回所需类的模拟,因为它位于正确的包中,所以它可以这样做。然后您可以调用实用程序方法而不是调用mock(MyPackagePrivateDao.class)。
【讨论】: