运行JUnit测试时,是否有任何方法在私有方法内替换逻辑?一些背景:我们有一些私有方法与OSGi容器中的bundle进行交互。这在单元测试中不可用,因此这些方法会失败。Java单元测试:替换测试中的私有方法
我们已经看过JMockIt,但方法替换功能似乎想要强制您替换类中相互调用的所有方法。
的实施将是这样的:
public final doSomething() {
firstThing();
secondThing();
}
private firstThing() {
// normal code
}
private secondThing() {
// code which is unavailable in a unit test
}
而单元测试将指定新的执行secondThing(的):
// replace secondThing() in impl with this secondThing()
private secondThing() {
// dummy code
}
// run tests
这看起来很有趣。在某些情况下,我在EasyMock中忽略了这一点,只有一个完整的类可以被嘲笑。 – 2010-01-08 03:19:36
是的,“JMockit Annotations”API总是基于用户指定的'@ Mock'方法进行部分模拟。 EasyMock API类似于“JMockit Expectations”API;他们都支持部分模拟,但EasyMock要求方法的名称在字符串中模拟(对于* partial * mocking,就是这样)。 – 2010-01-08 12:55:43
我认为这最完全地回答了问题,虽然我很欣赏建议的解耦解决方案并可能重新设计 – 2010-01-12 13:49:31