junit for spring boot rest控制器

c3frrgcw  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(360)

如何在springboot中为下面的rest控制器编写有意义的junit

@GetMapping("/api")
    public String m2(String process ) {

        if( process.equalsIgnoreCase("Y"))
        {
            jobs.start();
        } else if(process.equalsIgnoreCase("N"))
        {
            jobs.sendEmail();
        }
disbfnqx

disbfnqx1#

在我看来,一个编写良好的单元测试应该简洁,能够覆盖大部分(如果不是全部的话)代码分支,验证副作用,快速、可靠并且易于阅读。
假设您使用的是junit 5和mockito,这样做可以实现以上所有功能:

@ExtendWith(MockitoExtension.class)
class MyControllerTests {

  @Mock
  private Jobs jobs;
  private MyController myController;

  @BeforeEach
  public void setUp() {
    myController = new MyControllerImpl(jobs);
  }

  @Test
  void affirmativeProcessShouldStartJobs() {
    myController.m2("Y");
    verify(jobs).start();
  }

  @Test
  void negativeProcessShouldSendEmail() {
    myController.m2("N");
    verify(jobs).sendEmail();
  }

  //...add more tests here, eg.: what do you expect given null input?

}

p、 答:很明显,您可以提高这个单元测试的可读性,因为您比我们任何人都更清楚这个代码在应用程序上下文中的含义。此外,还应该在 m2(String) 返回值(我们无法从代码片段中看到)。
如果您想测试api是否已经公开,并且可以通过http进行联系,那么这将是一个端到端的测试,而不是单元测试,我建议不要使用junit,而是使用一些基于这种黑盒测试构建的东西,比如cucumber。

相关问题