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

时间:2015-07-29 18:55:37

标签: unit-testing grails grails-controller grails-services

使用Grails版本2.4.2

我有成功通过的控制器单元测试。 一旦我添加了测试MyService的MyServiceSpec,一些控制器单元测试开始失败。 如果我注释掉我的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类型,则无法正确呈现响应并且测试失败。我没有看到关于允许或禁止服务类的单元测试的任何详细文档。

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

1 个答案:

答案 0 :(得分:0)

您需要以这种方式定义单元测试......

@Mock(MyService)
class MyControllerTests{

@Before
void setUp() {
    service = mockFor(MyService).createMock()
}

@Test
void test() {

    controller.myService = service

mockFor(MyService).createMock()将创建模拟对象的实际实例,这将传递给控制器​​ MyService 属性。

希望这会有所帮助。感谢。