httpStatus.OK 和 httpStatus.Bad_Request 的 Junit 测试用例

Junit Test case for httpStatus.OK and httpStatus.Bad_Request

如何测试我的服务 class,它具有 storeInDb() 方法并返回数据库模型和 httpstatus.OKhttpstatus.Bad_Request 以及正文。

public ResponseEntity storeInDb(ExeEntity model) {
    Validator validation = new Validator();
    Map objValidate = validation.validateInput(model.getLink(), model.getUsername(), model.getPassword(),
            model.getSolution(), model.getDomain());
    if (objValidate.containsKey("Success")) {
         return new ResponseEntity(model, HttpStatus.OK);
    }
    else if (objValidate.containsKey("Fail")) {
        if (objValidate.containsValue("Invalid Credentials")) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid Credentials");
    } }
    else {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Domain does not exist.");
    } 
}

请帮我回答这个问题和写测试用例。提前致谢。

以您当前的代码设计,单元测试真的很难。 您的方法的完整逻辑基于 ExeEntityValidator 的结果。换句话说,它依赖于它。这种依赖关系应该在单元测试中被模拟掉。
为了模拟这个验证器,你应该应用依赖注入。这意味着您提供依赖项而不是在需要它的地方自己创建它。这是通过将依赖项传递到 class 的构造函数并将其存储为成员变量来完成的。

如果这样做,您的测试代码可能如下所示:

void test(){

    // mock a ExeEntityValidator that is used inside your '::storeInDb' method
    Map<String, Object> objValidated = Map.of("Success", true);
    var validator = mock(ExeEntityValidator);
    doReturn(objValidated).when(validator).validateInput(any(ExeEntity.class));

    // instantiate your component with the mocked ExeEntityValidator
    var cut = new UnknownClass(validator);
    var model = new ExeEntity(...);

    // call the method you want to test
    var response = cut.storeInDb(model);

    assertEquals(HttpStatus.OK, response.getStatusCode());
}