Junit for Spring Boot Rest Controller



如何在Spring Boot中为下面的RestController编写有意义的Junit

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

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

在我看来一个写得好的单元测试应该是简洁的能够覆盖大部分(如果不是全部的话)代码分支,验证副作用,快速可靠,便于阅读.

假设您正在使用JUnit 5Mockito,这样的代码将实现上述所有功能:

@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?
}

注:你可以明显地提高这个单元测试的可读性,因为你比我们任何人都更清楚这段代码在你的应用程序上下文中意味着什么。此外,您应该在m2(String)返回值上添加断言(我们无法从代码片段中看到)。

如果你想测试API实际上是公开的,可以通过HTTP联系,那将是一个端到端测试而不是单元测试,我不建议使用JUnit,而是使用用这种黑盒构建的东西。在脑海中测试,如黄瓜。

最新更新