如何在Mockobject的帮助下检查真实对象的空值?

时间:2019-06-20 05:11:17

标签: java mockito

我正在为以下代码编写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());
    }
}

2 个答案:

答案 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);
}