gpt4 book ai didi

java - 测试 web 层 Spring Boot

转载 作者:行者123 更新时间:2023-11-28 21:23:16 24 4
gpt4 key购买 nike

刚刚在 Spring Boot 中制作了一个 Controller ,我想对其进行单元测试。

Controller 及其方法的代码是:

@Controller
@RequestMapping("/projects/{pid}/clusters")
public class ClusterController {

@Autowired
private ClusterService clusterService;

@Autowired
private ProjectService projectService;


@RequestMapping(method = RequestMethod.GET)
public String getAllClusters(@PathVariable("pid") Integer projectId, Model model){
Project project = this.projectService.getProjectById(projectId);
Set<Cluster> clusters = project.getClusters();
model.addAttribute("projectID", projectId);
model.addAttribute("clusters", clusters);
return "clusters";
}

当用户访问特定 URL 时,此方法仅返回一个 View (HTML)。

我的测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class clusterControllerTest {

@LocalServerPort
private int port;

private URL base;

@Autowired
private TestRestTemplate testRestTemplate;

@Before
public void setUp() throws Exception{
}

@Test
public void getCluster() throws Exception{
this.base = new URL("http://localhost:" + port + "/projects/1/clusters");
ResponseEntity<String> response = testRestTemplate.getForEntity(base.toString(), String.class);
assertThat(response.getBody(), equalTo("clusters"));

}
}

我已经在其他测试中测试我的存储库和服务层。我只想在导航到特定 URL 时获得正确的返回(它调用 de Controller 中的特定方法)。

在我的示例中,当有人访问“http://localhost:”+ port +“/projects/1/clusters”时, Controller 应返回“clusters”。

当我执行这段代码时,我得到一个错误,指出我的 assertThat 出错了。因为“簇”是比作整个html页面。

我怎样才能轻松地测试我的 Controller 的返回字符串?我没有太多的测试经验。非常感谢!

编辑

@RunWith(MockitoRunner.class)
public class clusterControllerTest {
// inject any dependencies as mocks
ClusterController testee = new ClusterController();

@Test
public void getCluster() {
String returnedViewName = testee.getCluster();
assertThat(returnedViewName).isEqualTo("clusters"));
// Hurray, it worked, but does it verify anything? Nope.
}
}

使用其中一条评论的建议对其进行测试并获取返回类型。但是在我的 Controller 类中,我将模型模型作为参数。我怎样才能在测试中把它交给 Controller ?简单地将模型模型作为参数是行不通的。

最佳答案

关于java - 测试 web 层 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com