模拟包私有类

时间:2012-03-09 21:54:17

标签: junit mocking mockito

使用Mockito或其他类似的框架。有没有办法模拟一个包私有类? 我正在尝试测试我的服务层模拟我的DAO类。问题是DAO实例是包私有的,只能通过工厂获得。

MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class);

编译器说无法从包外部访问该类。 你有什么例子吗?

由于

2 个答案:

答案 0 :(得分:4)

这对Mockito来说是不可能的,它需要修改实际类的字节码。这不是计划的功能。

你有没有最终可以为这些DAO模拟的接口?

另一个选择是查看PowerMock,它非常适合处理遗留代码,即当软件设计强制你模拟静态,私有,最终等时。

答案 1 :(得分:3)

据推测,你的问题是你的SUT(以及它的测试)与你想要模拟的类不同,所以不会有问题。

我解决这个问题的方法是在测试类中为要模拟的类编写静态实用程序方法。这个实用程序方法应该只创建并返回所需类的模拟,它可以做,因为它在正确的包中。然后,您可以调用实用程序方法,而不是调用mock(MyPackagePrivateDao.class)