httpStatus.OK 和 httpStatus.Bad_Request 的 Junit 测试用例
Junit Test case for httpStatus.OK and httpStatus.Bad_Request
如何测试我的服务 class,它具有 storeInDb()
方法并返回数据库模型和 httpstatus.OK
和 httpstatus.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());
}
如何测试我的服务 class,它具有 storeInDb()
方法并返回数据库模型和 httpstatus.OK
和 httpstatus.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());
}