Java JUnit测试用例不是控制器中的检测方法

Java JUnit测试用例不是控制器中的检测方法,java,spring-boot,junit,testcase,spring-boot-test,Java,Spring Boot,Junit,Testcase,Spring Boot Test,新的弹簧靴 控制器中的API看起来像 @RestController("/path1/path2") public class SomeController { @GetMapping("/path3/path4") public String doSomething() { //code goes here } } @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_POR

新的弹簧靴

控制器中的API看起来像

@RestController("/path1/path2")
public class SomeController
{

@GetMapping("/path3/path4")
public String doSomething()
{
//code goes here
}

}
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = 
xxx.class)
@AutoConfigureMockMvc(secure = false)
public class AuthServiceTestCase
{

@Autowired
private MockMvc mock;

@Test
public void testDoSomething()
{

//Command 1
mock.perform(get("/path1/path2/path3/path4")).andExpect(status().isOK()); 

//Command 2
 mock.perform(get("/path3/path4")).andExpect(status().isOK()); 

}

}
测试用例看起来像

@RestController("/path1/path2")
public class SomeController
{

@GetMapping("/path3/path4")
public String doSomething()
{
//code goes here
}

}
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = 
xxx.class)
@AutoConfigureMockMvc(secure = false)
public class AuthServiceTestCase
{

@Autowired
private MockMvc mock;

@Test
public void testDoSomething()
{

//Command 1
mock.perform(get("/path1/path2/path3/path4")).andExpect(status().isOK()); 

//Command 2
 mock.perform(get("/path3/path4")).andExpect(status().isOK()); 

}

}
现在,在运行测试用例命令1之后,我得到了以下内容

java.lang.AssertionError:状态应为:但为:

但命令2如期成功

我的问题是,

RestController前缀路径+控制器前缀路径=整个路径

对于调用API,我们必须遵循上述格式,但如果遵循相同的格式,为什么Junit会失败呢

是否有人可以在这里删除一些输入?

在您的例子中/path1/path2是控制器bean的名称。要为控制器内的所有方法添加常规前缀路径,可以将

@RequestMapping("/path1/path2")
在您的控制器上。

在您的例子中/path1/path2是控制器bean的名称。要为控制器内的所有方法添加常规前缀路径,可以将

@RequestMapping("/path1/path2")
@RestController
@RequestMapping("/path1/path2")
public class SomeController
{

@GetMapping("/path3/path4")
public String doSomething()
{
//code goes here
}

}
在你的控制器上

@RestController
@RequestMapping("/path1/path2")
public class SomeController
{

@GetMapping("/path3/path4")
public String doSomething()
{
//code goes here
}

}
问题不在于你的测试课。问题在于requestMapping的错误使用


问题不在于你的测试课。问题是requestMapping的用法错误。

你能粘贴模拟定义吗?@Andronicus:Hi,谢谢回复。更新了问题。你能粘贴模拟定义吗?@Andronicus:Hi,谢谢回复。更新了问题,成功了。谢谢。请解释一下,RestController Prefix Path+Controller Prefix Path=整个路径这个模式是如何用于调用API而不是用于调用测试用例的。@NANDAKUMAR你能检查一下这个帖子吗?成功了。谢谢。请解释一下,RestController Prefix Path+Controller Prefix Path=整个路径这个模式是如何用于调用API而不是用于调用测试用例的。@NANDAKUMAR你能检查一下这个帖子吗?