gpt4 book ai didi

java - 如何模拟类中使用的方法,但它不作为参数传递?

转载 作者:行者123 更新时间:2023-12-03 07:59:00 27 4
gpt4 key购买 nike

我有以下类(class):

import name.package.OtherClass;
import name.package.Context;
import name.package.Configuration.keys;

public class MyClass{
public static void configure(Context context){
Configuration config = new OtherClass().getConfiguration(keys);
context.configure(config);
}
}

我想模拟方法OtherClass.getConfiguration()。我可以执行以下操作吗?

import org.mockito.Mock;
import org.mockito.Mockito;

public class MyClassTest{
@Mock
private Context context = Mockito.mock(Context.class);

@Mock
private OtherClass otherClass = Mockito.mock(OtherClass.class);

@Mock
private Context configurationMock = Mockito.mock(Configuration.class);

@Test
public void testConfigure(){
Mockito.when(otherClass.getConfiguration(keys)).thenReturn(configurationMock);
MyClass.configure(context);
verify(context.configure(configurationMock), times(1))
}
}

请记住,OtherClass 不是 MyClass 的参数,我想知道测试类中对它的模拟是否在 MyClass< 中生效 运行测试时的实例。

我尝试执行此操作,但没有得到明确的结果。

最佳答案

现代版本的 Mockito 允许您模拟构造函数。

首先,确保您具有 mockito-inline 依赖项,而不是 mockito-core 依赖项。例如,在 Maven 中,您将得到如下内容:

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.10.0</version>
<scope>test</scope>
</dependency>

然后,您可以使用 mockConstruction 方法来替换 OtherClass 的构造函数,并模拟您需要的行为:

class MyClassTest {
@Mock
Configuration mockedConfig;
@Mock
Context mockedContext;

@Test
public void testConfigure() {
try (MockedConstruction<OtherClass> mockedConstruction =
Mockito.mockConstruction(OtherClass.class, (mock, context) -> {
Mockito.when(mock.getConfiguration(Mockito.any())).thenReturn(mockedConfig);
// Additional mocking you may need
})) {
MyClass.configure(mockedContext);
// assertions...
}
}
}

关于java - 如何模拟类中使用的方法,但它不作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74984807/

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