在本节中,我们将继续测试实现,并将测试特定于 Spring 的主题。首先,我们将指定 SprintRunner 类,它将用作我们测试的测试运行器:
通过注释 @RunWith(SpringRunner::class),我们指定 SpringRunner 将用于测试运行并将初始化 TestContextManager 以提供 Spring测试功能到标准测试。让我们再次运行测试。观察以下屏幕截图中的输出:
如您所见,Spring Framework 被用于支持我们刚刚运行的测试。
我们已经知道,NoteTest 类没有任何实现。我们将测试我们的应用程序的服务层,我们将添加一些代码,以便测试可以实际检查一些东西。我们将注入 NoteService 并断言它已被实例化:
我们成功地注入了 NoteService 类并断言它。我们还介绍了一个非常重要的注解:@SpringBootTest。可以在运行基于 Spring Boot 的测试的测试类上指定此注解。正如类文档所指定的,它在常规 Spring TestContext Framework 上提供了以下功能:
- Uses SpringBootContextLoader as the default ContextLoader when no specific @ContextConfiguration(loader=...) is defined
- Automatically searches for a @SpringBootConfiguration when the nested @Configuration is not used, and no explicit classes are specified
- Allows custom environment properties to be defined using the properties attribute
- Provides support for different web environment modes, including the ability to start a fully running container listening on a defined or random port
- Registers a TestRestTemplate bean for use in web tests that are using a fully running container
运行你的测试;它必须通过,如以下屏幕截图所示:
我们现在拥有了测试服务层的笔记所需的一切。让我们编写一些测试实现来验证服务层的功能:
在这里,我们稍微重新组织了代码,使用 cleanup 方法在测试运行之前清理数据,而不是在测试之后调用它。我们还切换了 select() 和 delete() 方法的方法执行顺序。每个方法的实现应该很容易理解。我们将为 Note 实体执行和验证 crud 操作。然后,运行您的测试。它会成功:
我们将为 TODO 编写一个类似的实现。创建 TodoTest 类并确保它是这样实现的:
我们做了与 Note 实体相同的测试,除了我们验证了特定于 TODO 实体的 schedule 字段。如果您愿意,可以扩展这两个测试以验证更多属性。运行 TodoTest:
测试将成功执行。