gpt4 book ai didi

java - mockito `when` 未返回正确的模拟列表

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:57 26 4
gpt4 key购买 nike

我有一个测试类 TestService1 包含测试方法和两个服务类 Service1Service2。我正在为 Service2 类中的 isResourceAlreadyPresent 方法编写 JUnit 测试,其中包括对 Service1 类方法的调用。在测试方法中我写了

when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList);

因此,当 testMapper1.getAlreadyPresentResources() 被调用时,它应该返回 mockTestResourceList ,其大小为 1,但它不返回此列表,而是返回一个列表,但尺寸 0。

    @ContextConfiguration(locations = "../TestServiceApplicationContext1.xml")
public class TestService1
{
@Autowired
private TestMapper1 testMapper1;

private TestResource testResource1;
private List<TestResource> mockTestResourceList;

private Service1 service1;

private Service1 service2;

@Before
public void setUp()
{
testMapper1 = mock(TestMapper1.class);

service1 = Service1Util.getService();
service1.setTestMapper1(testMapper1);

mockTestResourceList = new ArrayList<TestResource>();
testResource1 = Service1Util.createTestResource();
testResource1.setId(1);
mockTestResourceList.add(testResource1);

}

@Test
public void isResourceAlreadyPresentTest()
{
when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList);

boolean isPresent = service2.isResourceAlreadyPresent();

assertTrue(isPresent == true);
}

}

public class Service2
{
... some code ...

public boolean isResourceAlreadyPresent()
{
List<TestResource> resourceList = Service1Util.getAlreadyPresentResources(); //service1.getTestMapper1().getAlreadyPresentResources();
//resourceList size is 0
if(resourceList.size() > 0)
return true;
else
return false;
}

... some code ...
}

最佳答案

您需要做的是在您的 junit 调用任何方法之前在您正在执行测试的 Service2 类中设置 Service1 对象。我想您没有在服务 2 中正确设置服务 1 对象,并且它采用了其他值。

在调用 Service2 上的任何测试方法之前,使用反射在 Service2 类中设置 Service1 对象。反射只能用于测试目的,而不是在代码中。

ReflectionTestUtils.setField(service1instance, "service",
serviceobjectvalue);

关于java - mockito `when` 未返回正确的模拟列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24164057/

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