如何在测试用例 HTTP 方法中访问变量值 URL

How to access variable value in test case HTTP method URL

我正在尝试为控制器 classes 在 spring 引导 jpa 应用程序中编写 Junit 测试用例。在控制器中 class InstituteIdentifier url 中的变量 我正在从 application.property 文件中这样访问 ${InstituteIdentifier}。在这里,我在 url

中获得该值

在测试用例中,我也在使用 @value 注释从 application.property 访问 InstituteIdentifier 变量。我能够在控制台中打印该值。但是当我在测试用例 GET 方法 url 中访问该变量时,我收到此错误 java.lang.IllegalArgumentException: Not enough variable values available to expand 'InstituteIdentifier

当我搜索这个错误时我发现这里${InstituteIdentifier}我们不需要给{}。当我删除 {} 变量值时 url.

谁能告诉我该怎么做?

application.property

InstituteIdentifier=vcufy2010

部门主管

@RestController
@CrossOrigin(origins ="${crossOrigin}")
@RequestMapping("/spacestudy/${InstituteIdentifier}/control/searchfilter")
public class DepartmentController {

    @Autowired
    DepartmentService depService;

    @GetMapping("/loadDepartments")
    public ResponseEntity<Set<Department>> findDepName() {

        Set<Department> depname = depService.findDepName();

        return ResponseEntity.ok(depname);
    }   
}

测试部门控制器

@RunWith(SpringRunner.class)
@WebMvcTest(value=DepartmentController.class)
public class TestDepartmentController {

    @Autowired
    private MockMvc  mockMvc;

    @MockBean
    DepartmentService departmentService;

    @Value("${InstituteIdentifier}")
    private String InstituteIdentifier;

    @Test
    public void testfindDepName() throws Exception {

        System.out.println(InstituteIdentifier);//vcufy2010

        Department department = new Department();       
        department.setsDeptName("ABC");


        Set<Department> departmentObj = new HashSet<Department>();
        departmentObj.add(department);

        Mockito.when(departmentService.findDepName()).thenReturn(departmentObj);

        mockMvc.perform(get("/spacestudy/${InstituteIdentifier}/control/searchfilter/loadDepartments")
                            .accept(MediaType.APPLICATION_JSON))

When I search for this error I found that here ${InstituteIdentifier} we don't need to give {}. when I am removing {} variable value is not feaching in url.

要使用 String 变量的值,您不需要 {} 也不需要 $
事实上,你不需要评估任何东西。由于 Spring 的 @Value,它已经完成了。

所以在你的测试中,这是正确的:

@Value("${InstituteIdentifier}")
private String instituteIdentifier;

因为您需要从加载的属性中检索值。

然后你只需要通过连接 Strings :

来传递提交的 url 中的 instituteIdentifier 变量的值
mockMvc.perform(get("/spacestudy/" + instituteIdentifier +  "/control/searchfilter/loadDepartments")
                            .accept(MediaType.APPLICATION_JSON))