I want to unit test my service layer code using junit and mockito.Now in my service layer method instead of returning directly dao layer response,I am returning a wrapper response in following way
public MyResponseClass fetchMyEntityRecords(){
List<MyEntity> myEntities = myDao.findAll();
List<MyDto> myDtoList = new ArrayList<MyDto>();
MyResponseClass obj = new MyResponseClass();
if(myEntities!=null && !myEntities.isEmpty()){
obj.setStatus("Success")
obj.setMessage("Data Found");
for(MyEntity myEntity : myEntities){
MyDto myDto = new MyDto();
BeanUtils.copyProperties(myEntity,myDto);
myDtoList.add(myDto);
}
obj.setData(myDtoList)
}else{
obj.setStatus("Failure")
obj.setMessage("Data Not Found");
obj.setData(Collections.emptyList());
}
return obj;
}
Now in Unit testing time
@Mock
private MyDao myDao;
@InjectMocks
private MyService myService;
@Test
void listOfMyEntityTest() {
MyEntity myEntity1= new MyEntity();
//setter method's invoked for setting value to enity1 object
MyEntity myEntity2= new MyEntity();
//setter method's invoked for setting value to enity2 object
when(myDao.findAll()).thenReturn(List.of(enity1,enity2));
var response = myService.fetchMyEntityRecords();
Assertions.assertThat(response.getData().size()>0).isTrue();
}
I am getting following error
Expecting value to be true but was false
org.opentest4j.AssertionFailedError:
Expecting value to be true but was false
Now the response is actually MyResponseClass.Now my unit test is failing because i am unable to mock this MyResponseClass. How to achieve it?