[英]Mockito not returning correct result from mocked method with multiple “when” conditions
[英]mockito `when` not returning correct mocked list
我有一個測試類TestService1
其中包含測試方法以及兩個服務類Service1
和Service2
。 我正在編寫Service2
類中方法isResourceAlreadyPresent
JUnit測試,其中包括對Service1
類方法的調用。 在測試方法中,我寫了
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對象。 我想您尚未在Service 2中正確設置Service1對象,並且其取其他值。
在對Service2調用任何測試方法之前,請使用Reflection在Service2類中設置Service1對象。 反射應僅用於測試目的,而不能用於代碼中。
ReflectionTestUtils.setField(service1instance, "service",
serviceobjectvalue);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.