【发布时间】:2015-06-06 13:00:51
【问题描述】:
我有像下面这样的类方法,它创建一个本地对象并调用该本地对象的方法。
public class MyClass {
public someReturn myMethod(){
MyOtherClass otherClassObject = new MyOtherClass();
boolean retBool = otherClassObject.otherClassMethod();
if(retBool){
// do something
}
}
}
public class MyClassTest {
@Test
public testMyMethod(){
MyClass myClassObj = new MyClass();
myClassObj.myMethod();
// please get me here..
}
}
当我测试myMethod 时,我想模拟otherClassObject.otherClassMethod 以返回我选择的内容。 otherClassMethod 对消息队列做了一些类,我不希望在单元测试中这样做。所以我想在执行 otherClassObj.otherClassMethod() 时返回 true。我知道在这种情况下我必须使用工厂进行MyOtherClass 实例化,但它是遗留代码,我现在不想更改任何代码。我看到 Mockito 没有提供这个工具来模拟 MyOtherClass 在这种情况下,但可以使用 PowerMockito。但是,我找不到上述场景的示例,但仅找到静态类。我应该如何在 SUT 的方法中模拟本地对象?
我还提到了一些其他操作系统问题,例如 - Mocking methods of local scope objects with Mockito,但它们没有帮助。
一个代码示例会有很大帮助。
【问题讨论】:
-
你可以使用反射来做到这一点。
-
等一下;从您的示例代码中,您的
otherClassObject调用被完全忽略。您的示例代码是否不完整,或者您不能只是模拟myMethod的结果? -
@fge,我更新了我的代码和问题。
-
你想从
myMethod()这里测试什么?我真的不明白你在追求什么...... -
@fge myMethod 中的 retBool 之后有很多代码。我没有把所有的东西都放在这里。我的问题是 - 在这种情况下如何模拟 otherClassObject。
标签: java unit-testing mockito powermock powermockito