Java 如何为SpringMVC控制器类编写JUnit测试?
我想为我的Java 如何为SpringMVC控制器类编写JUnit测试?,java,spring-mvc,junit,junit4,Java,Spring Mvc,Junit,Junit4,我想为我的UserController类编写一个JUnit测试(Java单元),但我不知道怎么做 用户控制器: @RestController @RequestMapping(CompositeController.ENTRY) public class UserController { protected final static String ENTRY = "/demo/v1/composite"; private UserService userService; @Autowired
UserController
类编写一个JUnit测试(Java单元),但我不知道怎么做
用户控制器:
@RestController
@RequestMapping(CompositeController.ENTRY)
public class UserController {
protected final static String ENTRY = "/demo/v1/composite";
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping(path = "/isadmin")
public ResponseEntity<Boolean> checkadmin(@RequestHeader String nickname){
return userService.checkifadmin(nickname);
}
@RestController
@RequestMapping(CompositeController.ENTRY)
公共类用户控制器{
受保护的最终静态字符串条目=“/demo/v1/composite”;
私人用户服务;
@自动连线
公共用户控制器(用户服务用户服务){
this.userService=userService;
}
@GetMapping(path=“/isadmin”)
public ResponseEntity checkadmin(@RequestHeader字符串昵称){
返回userService.checkifadmin(昵称);
}
用户服务:
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
@Service
public interface UserService {
ResponseEntity<Boolean> checkifadmin(String nickname);
}
import org.springframework.http.ResponseEntity;
导入org.springframework.stereotype.Service;
@服务
公共接口用户服务{
ResponseEntity checkifadmin(字符串昵称);
}
UserServiceImpl:
public class UserServiceImpl implements UserService {
private final String userBaseAdress = "http://localhost:7777";
private final String userBasePath = "/demo/v1/user";
public ResponseEntity<Boolean> checkifadmin(String nickname) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("nickname", nickname);
HttpEntity<String> entity = new HttpEntity<String>(headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Boolean> response = restTemplate.exchange(userBaseAdress + userBasePath + "/isadmin",
HttpMethod.GET, entity, Boolean.class);
return response;
}
}
public类userserviceinpl实现UserService{
私有最终字符串UserBaseAddress=”http://localhost:7777";
私有最终字符串userBasePath=“/demo/v1/user”;
公共响应性检查管理员(字符串昵称){
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set(“昵称”,昵称);
HttpEntity=新的HttpEntity(标题);
RestTemplate RestTemplate=新RestTemplate();
ResponseEntity response=restTemplate.exchange(userbaseAddress+userBasePath+“/isadmin”,
HttpMethod.GET,实体,Boolean.class);
返回响应;
}
}
您可以使用Spring的MockMvc
。查看以下位置的详细信息:
另一个有用的方法是根本不启动服务器,而是进行测试
只有在它下面的层,Spring处理传入的HTTP
请求并将其交给您的控制器。这样,几乎可以完成全部任务
使用堆栈,调用代码的方式将与
它正在处理一个真正的HTTP请求,但没有成本
启动服务器。为此,我们将使用Spring的MockMvc,并且
可以通过使用
@测试用例上的AutoConfigureMockMvc注释:
您可以使用Spring的
MockMvc
。查看以下位置的详细信息:
另一个有用的方法是根本不启动服务器,而是进行测试
只有在它下面的层,Spring处理传入的HTTP
请求并将其交给您的控制器。这样,几乎可以完成全部任务
使用堆栈,调用代码的方式将与
它正在处理一个真正的HTTP请求,但没有成本
启动服务器。为此,我们将使用Spring的MockMvc,并且
可以通过使用
@测试用例上的AutoConfigureMockMvc注释:
欢迎来到StackOverFlow,据我所知,我们不会对控制器执行单元测试,单元测试就像它们的名字一样,用于测试“单元”一个简单的功能示例添加到数据库或更新,对于我们执行“集成”的控制器tests@ElarbiMohamedAymen,在控制器上执行单元测试是完全可以的,只要您关注它的ic单元。单元测试控制器级别对于仅由控制器功能决定的条件状态代码响应来说非常酷。模拟是一个很好的开始。请查看S.K.的答案。为了清楚起见,@Dja111的问题确实有效。控制器单元测试应该关注控制器级别,而不是依赖的较低级别dency图。单元测试分为两个级别。使用MockMvc进行测试,并通过框架调用控制器方法,或在测试中直接调用控制器方法,并通过预设的Mock模拟框架响应。第一个是集成测试的一半,第二个是经典单元测试。欢迎来到StackOverFlow,据我所知,我们不在控制器上执行单元测试,单元测试就像它们的名字一样,用于测试“单元”一个简单的功能示例添加到数据库或更新,对于我们执行“集成”的控制器tests@ElarbiMohamedAymen,在控制器上执行单元测试是完全可以的,只要您关注它的特定单元。单元测试控制器级别对于仅由控制器函数决定的条件状态代码响应来说非常酷。模拟是一个很好的开始。请查看S.K.的答案。为了清楚起见,@Dja111的问题确实有效。控制器单元测试应该关注控制器级别,而不是依赖关系图的较低级别re是两个级别的单元测试。使用MockMvc进行测试,并通过框架调用控制器方法,或在测试中直接调用控制器方法,并通过预设的Mock模拟框架响应。第一个是集成测试的一半,第二个是经典的单元测试。。