当前位置: 首页 > 知识库问答 >
问题:

为spring hateoas执行单元测试用例时缺少jsonRootName

翟嘉年
2023-03-14

我已经使用spring boot starter Hateoas开发了一个rest服务,我能够正确地获得json输出,如下所示:

"_embedded": {
   "bills": 
         {
          uid: "123"
          code: "0000"

我需要用mockito为同样的代码编写单元测试用例。我写的代码如下。

应用测试。爪哇:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class ApplicationTest {

BillControllerAutoTest:

public class BillControllerAutoTest {

private BillService mockBillService;
private MockMvc mockMvc;
private static final String BILL_UID = "99991";

@Before
public void setupController() {
           mockBillService= mock(BillService .class);
          BillController controller = new BillController (mockBillService);
    mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}    

@Test
public void testGetBills() throws Exception {
    // some fake data
    final List<Bill> fakeBillList= new ArrayList<>();
    fakeBillList.add(BillFake.bill("1234"));

    when(mockBillService.getBills(BILL_UID))
            .thenReturn(fakeBillList.stream());

    // execute and verify
    mockMvc.perform(get("/bills/" + BILL_UID ))
            .andExpect(content().string(containsString("\"embedded\":{\"bills\"")))

BillController.java:

@RestController
@RequestMapping(value = "/bills/{billUid}", produces = "application/hal+json")
public class BillController extends BaseController {
private BillService billService;

    @RequestMapping(method = RequestMethod.GET, value = "")
public ResponseEntity<Resources<Resource<Bill>>> getBills(@PathVariable String billUid) {
    return resourceListResponseEntity(
            () -> billService.getBills(billUid),
            bill-> createResource(billUid),
            resources -> resources.add(linkTo(methodOn(BillController .class)
                    .getBills(billUid)).withSelfRel()));
}

依赖项:

dependencies {
compile "org.springframework.boot:spring-boot-starter-hateoas"
compile "org.springframework.boot:spring-boot-starter-ws"
compile "org.springframework.boot:spring-boot-starter-actuator"

testCompile("org.springframework.boot:spring-boot-starter-test")
} 

我的构建失败与以下stackTrace:

java.lang.AssertionError: Response content
Expected: a string containing "\"_embedded\":{\"bills\""
 but: was 
"content":[
   {
   uid: "123"
   code: "0000"

这意味着单元测试的mockMvc返回的响应中没有“_embedded:{bills”。如果我缺少任何配置,请告诉我。任何帮助都将不胜感激。

共有1个答案

宰父衡
2023-03-14

我在这里回答了非常类似的问题:Spring的MockMVC响应与浏览器响应不匹配

简而言之:spring HATEOAS为正确渲染hal添加了额外的配置(如下所述:http://docs.spring.io/spring-hateoas/docs/0.19.0.RELEASE/reference/html/#configuration).在测试中,您必须手动应用此配置。查看第一个链接,了解如何操作的详细信息

 类似资料:
  • 当使用resharper从视觉工作室运行单元测试时,我得到了以下错误: 在单元测试方法旁边的工具提示中,它说:,我认为它说。Resharper显示一个灰色的眼睛图标。 VisualStudio的测试资源管理器也有一个棘手的问题。它不会显示我所有的单元测试。事实上,它错过了我的200多个单元测试。它们不会出现在测试浏览器窗口中。我确实有一些测试出现了,并且运行得很好。 我已经尝试过的事情:重新启动我

  • 我有一个詹金斯声纳装置,还有一个maven项目。这个maven项目只有一个pom,但包含java、javascript、html等。所以对于sonar来说,它是一个多模块项目,所以我可以获得每个部分的统计数据。 我们还希望获得项目的代码覆盖率分析,这意味着我们需要在声纳分析之前运行测试并导出它们(至少从我收集的声纳跑步者不能做这种类型的分析)。 因此,我把詹金斯的工作设置为第一步做,然后运行调用独

  • 在使用maven运行单元测试时,我遇到了这个异常。我的所有测试都没有执行。我的测试类的格式是 我正在运行以下命令来运行此命令: 使用的surefire插件是: 有人知道为什么我的测试没有执行吗?我用的是jUnit 4.8.2和surefire 2.14.1

  • 我正在为Junit编写测试,以测试我编写的删除函数: 此方法适用于同时具有前后节点的双链接列表。 问题是:我们的大学将针对我们编写的测试运行错误代码,以确定我们是否编写了足够的测试来捕获错误代码和异常。 我知道他们将运行的两个测试,但不知道错误的含义。 > 失败:缺少逻辑 故障:缺少NextNodeRepairLogic 这是我没有考虑的两个测试,因为我无法理解这些错误的含义。有人知道这些错误可能

  • 我用编写了以下测试(使用框架时): 然而,当我运行它时,字段似乎丢失了。我得到以下错误: 我想知道为什么,因为我在一节中声明了它。你能帮我吗?

  • 我有一个春靴项目。我已经在.../src/test/java/...中编写了单元测试。目录。我的所有单元测试的形式都是*test.java。当我运行“MVN测试”时,我得到以下输出: 在这方面的任何帮助都是非常感谢的。 我没有展示我的全部POM。以下是Junit的内容: