所以我的测试类的代码看起来很像这样
public void doSomething(int param)
{
Report report = new Report()
...do some calculations
report.someMethod(someData)
}
我的意图是将报告的构造提取到受保护的方法中并覆盖它以使用模拟对象,然后我可以对其进行测试以确保使用正确的数据调用了 someMethod。
到目前为止,一切都很好。但是 Report 不在我的控制之下,更糟糕的是,它使用 JNI 在运行时加载库。
如果我报告报告 = EasyMock.createMock(Report.class)
然后 EasyMock 尝试使用反射来找出类成员,但这会导致尝试加载 JNI 库,但失败(JNI 库仅在 UNIX 上可用)。
我正在考虑两件事:a)引入一个具有两个实现的 ReportWrapper 接口,其中一个将调用委托给一个真实的报告(所以基本上是一个代理),第二个基本上将使用一个模拟对象。或 b) 不调用 someMethod,而是调用受保护的方法,该方法又会调用我可以在测试子类中覆盖的 someMethod。
无论哪种方式,它似乎都令人讨厌。还有更好的方法吗?