JUnit 测试用例未在控制器中检测方法
JUnit Test Case is not detecting method in controller
新 spring 引导。
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());
}
}
现在,在 运行 测试用例(命令 1)之后,我得到了以下内容
"java.lang.AssertionError: Status expected:<200> but was:<404>"
但是"Command 2"如期成功。
我的问题是,
RestController Prefix Path + Controller Prefix Path = Entire Path.
为了调用一个 API,我们必须遵循上面的格式,但是如果遵循相同的格式,为什么 Junit 会失败?
有人可以在这里输入一些信息吗?
在您的例子中,/path1/path2
是控制器 bean 的名称。要为控制器内的所有方法添加通用前缀路径,您可以将
@RequestMapping("/path1/path2")
在你的控制器上。
@RestController
@RequestMapping("/path1/path2")
public class SomeController
{
@GetMapping("/path3/path4")
public String doSomething()
{
//code goes here
}
}
问题不是你的测试class。问题是 requestMapping 的错误使用。
新 spring 引导。
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());
}
}
现在,在 运行 测试用例(命令 1)之后,我得到了以下内容
"java.lang.AssertionError: Status expected:<200> but was:<404>"
但是"Command 2"如期成功。
我的问题是,
RestController Prefix Path + Controller Prefix Path = Entire Path.
为了调用一个 API,我们必须遵循上面的格式,但是如果遵循相同的格式,为什么 Junit 会失败?
有人可以在这里输入一些信息吗?
在您的例子中,/path1/path2
是控制器 bean 的名称。要为控制器内的所有方法添加通用前缀路径,您可以将
@RequestMapping("/path1/path2")
在你的控制器上。
@RestController
@RequestMapping("/path1/path2")
public class SomeController
{
@GetMapping("/path3/path4")
public String doSomething()
{
//code goes here
}
}
问题不是你的测试class。问题是 requestMapping 的错误使用。