为什么添加grails Service单元测试会破坏控制器单元测试?



使用Grails version 2.4.2

我有成功通过的控制器单元测试。当我添加了一个MyServiceSpec来测试MyService时,一些控制器单元测试开始失败。如果我注释掉MyServiceSpec测试,它们就会再次通过。我已经能够将其缩小到与MimeType bean初始化相关的东西。

如果MyServiceSpec运行,则使用

打印MimeType
MimeType.getConfiguredMimeTypes().each { MimeType mt ->
           println mt.name
       }

输出
text/html

没有MyServiceSpec,它是

application/atom+xml
text/css
text/csv
application/x-www-form-urlencoded
text/html
application/xhtml+xml
text/javascript
application/json
text/json
multipart/form-data
application/rss+xml
text/plain
application/hal+json
application/hal+xml
text/xml
application/xml

没有json mime类型,响应不能正确呈现,测试失败。我没有看到任何关于允许或不允许Service类进行单元测试的详细文档。

服务级别单元测试是不正确的吗?应该把它移到集成测试区域吗?相关问题是,为什么在引入服务单元测试时,其他控制器测试的默认MimeType配置会被清除?

您需要这样定义单元测试…

@Mock(MyService)
class MyControllerTests{
@Before
void setUp() {
    service = mockFor(MyService).createMock()
}
@Test
void test() {
    controller.myService = service

mockFor(MyService). createmock ()将创建模拟对象的实际实例,这就是您将传递给控制器MyService属性的内容。

希望这对你有帮助。谢谢。