Java mockito`when`未返回正确的模拟列表
我有一个测试类TestService1包含测试方法和两个服务类Service1和Service2。我正在为Service2类中的方法IsResourceReadyPresent编写JUnit测试,该类包括对Service1类方法的调用。在我写的测试方法中Java mockito`when`未返回正确的模拟列表,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我有一个测试类TestService1包含测试方法和两个服务类Service1和Service2。我正在为Service2类中的方法IsResourceReadyPresent编写JUnit测试,该类包括对Service1类方法的调用。在我写的测试方法中 when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList); 因此,当调用testMapper1.getAlreadyPresentResou
when(testMapper1.getAlreadyPresentResources()).thenReturn(mockTestResourceList);
因此,当调用testMapper1.getAlreadyPresentResources时,它应该返回大小为1但不返回此列表的mockTestResourceList,并且返回大小为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中正确设置Service1对象,并且它采用了一些其他值 在调用Service2上的任何测试方法之前,请使用反射在Service2类中设置Service1对象。反射应仅用于测试目的,而不应在代码中使用
ReflectionTestUtils.setField(service1instance, "service",
serviceobjectvalue);
这是我已经编写的测试代码,不能工作,因为我不能发布它。您可以将其视为哑代码。