我正在为以下代码编写Mockito,但是对于空检查和空检查却以某种方式给出错误。
我该如何调试呢?
public boolean isValid(StudentDto dto) {
return (dto.getFirstName().isEmpty() && dto.getlastName().isEmpty()
&& dto.getEmailId().isEmpty() && dto.getAddress().isEmpty()
&& dto.getPhone().isEmpty() && dto.getCity().isEmpty());
}
public ResponseEntity<HttpStatus> saveStudent(@Valid StudentDto dto) {
if(isValid(dto)) {
log.error(env.getProperty("error.errors"), env.getProperty("error.missing.input.parameters"));
throw new NotFoundException(env.getProperty("error.missing.input.parameters"), BusinessErrorCode.MISSING_REQUIRED_INPUTS);
}
// Convert to entity
Student student = convertToEntity(dto);
try {
studentRepository.save(student);
} catch (Exception ex) {
log.error(env.getProperty("error.errors"), env.getProperty("error.db.exception"));
throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, env.getProperty("error.db.exception"), ex);
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
测试类:
@RunWith(PowerMockRunner.class)
@PrepareForTest({})
public class StudentServiceTest {
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@Mock
private StudentRepository studentRepositoryMock;
@InjectMocks
private StudentService studentService;
@Mock
private Student studentMock;
// Define the Environment as a Mockito mock object
@Mock
private Environment env;
@Mock
private StudentDto studentDtoMock;
List<Student> students = new ArrayList<>();
// Test case for SaveStudent
@Test
public void testSaveStudent() {
when(divisionService.isValid(studentDtoMock)).thenReturn(true);
assertEquals(new ResponseEntity<HttpStatus>(HttpStatus.OK).getStatusCode(),
divisionService.saveStudent(studentDtoMock).getStatusCode());
}
}
答案 0 :(得分:1)
在不检查StudentDto
为null的情况下,您引用此对象的字段。首先,您需要检查dto==null
,然后参考dto的字段。否则,它可能会给出例外。
您的方法isValid
可能是:
public boolean isValid(StudentDto dto) {
return (dto==null||((dto.getFirstName().isEmpty() && dto.getlastName().isEmpty()
&& dto.getEmailId().isEmpty() && dto.getAddress().isEmpty()
&& dto.getPhone().isEmpty() && dto.getCity().isEmpty())));
}
答案 1 :(得分:0)
我在下面使用,效果很好。
public boolean isValid(StudentDto dto) {
return StringUtils.isEmpty(dto);
}