【问题标题】:JUnit Test Case is not detecting method in controllerJUnit 测试用例未检测控制器中的方法
【发布时间】:2023-03-13 02:08:01
【问题描述】:

Spring Boot 新手。

控制器中的 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:预期状态: 但原为:”

但“命令 2”按预期成功。

我的问题是,

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

为了调用 API,我们必须遵循上述格式,但是如果遵循相同的内容,为什么 Junit 会失败?

有人可以在这里丢掉一些输入吗?

【问题讨论】:

  • 你能粘贴模拟定义吗?
  • @Andronicus:您好,谢谢您的回复。更新了问题。

标签: java spring-boot junit testcase spring-boot-test


【解决方案1】:
@RestController
@RequestMapping("/path1/path2")
public class SomeController
{

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

}

问题不在于您的测试课程。问题是 requestMapping 的错误使用。

【讨论】:

  • 成功了。谢谢。您能否解释一下,(RestController Prefix Path + Controller Prefix Path = Entire Path)这个模式如何用于调用 API 而不是用于测试用例调用。
  • @NANDAKUMAR 你能看看这篇文章吗? stackoverflow.com/questions/45210005/…
【解决方案2】:

在您的情况下,/path1/path2 是控制器 bean 的名称。要为控制器内的所有方法添加通用前缀路径,您可以放置​​

@RequestMapping("/path1/path2")

在您的控制器上。

【讨论】:

    猜你喜欢
    • 2022-10-02
    • 2013-06-17
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多