gpt4 book ai didi

java - 使用 Mockito 或 PowerMocktio 在 SUT 的方法中模拟本地对象

转载 作者:行者123 更新时间:2023-11-29 06:58:59 26 4
gpt4 key购买 nike

我有像下面这样的类方法,它创建一个本地对象并调用该本地对象的方法。

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但他们没有帮助。

代码示例会有很大帮助。

最佳答案

如果您使用的是 PowerMockito,则可以使用 whenNew 方法

它应该看起来像这样:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class) //tells powerMock we will modify MyClass to intercept calls to new somewhere inside it
public class MyClassTest{

@Test
public void test(){
MyOtherClass myMock = createMock(MyOtherClass.class);
//this will intercept calls to "new MyOtherClass()" in MyClass
whenNew( MyOtherClass.class).withNoArguments().thenReturn( myMock) );
... rest of test goes here

}

另外这篇 SO 帖子也有示例代码 PowerMockito Mocking whenNew Not taking affect

关于java - 使用 Mockito 或 PowerMocktio 在 SUT 的方法中模拟本地对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29398283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com