gpt4 book ai didi

java - 如何模拟在被测试方法内创建的对象上的方法调用

转载 作者:行者123 更新时间:2023-12-01 16:46:06 25 4
gpt4 key购买 nike

我有一个类,其休息终点如下:

@Path("/myPath/myFunction")
public class MyClass {
@Get
@Path("someSpecificFunction")
public Response getSomeData(@QueryParam("myVar") String myVar) {
MyObject myObject = new MyObject();
JsonObject response = myObject.getJson(myVar);
return Response.ok(response.toString()).build();
}
}

我想为 getSomeData 编写一个单元测试,并想模拟 myObject.getJson 调用。

最好的方法是什么?

如果可能的话,我想避免在 MyClass 上使用 @PrepareForTest

我尝试将 MyObject 实例的创建转换为静态方法,例如:

protected static MyObject createMyObject() {
return new MyObject();
}

但是,即使对于模拟或静态方法,PowerMockito 也需要 @PrepareForTest

如何解决这个问题?

最佳答案

您可以使用 whenNew() 来使用 PowerMocktio

,步骤

  1. 准备测试MyClass
  2. 使用whenNew这意味着当一个新对象被实例化时,使用这个模拟的对象

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class ExampleClassTest {

private MyClass myClass;

@Before
public void setUp() {
myClass = new MyClass();
}

@Test
public void shouldDoSomething() {
MyObject mocked = mock(MyObject.class);
PowerMockito.whenNew(String.class).withNoArguments().thenReturn(mocked);

assertEquals("mocked", myClass.getString());
}

关于java - 如何模拟在被测试方法内创建的对象上的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61775965/

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