如何使用模拟对象检查真实对象的空值



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

如果不检查 null 的 StudentDto ,则引用此对象的字段。首先,您需要检查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())));
}

我在下面使用,它工作正常。

public boolean isValid(StudentDto dto) {
        return StringUtils.isEmpty(dto);
}

相关内容

  • 没有找到相关文章

最新更新