IntelliJ(v2016.3)中JUnit测试的默认配置是在启动前运行Build
。通常,这是一件好事,因为它确保在运行测试之前已应用所有更改。但是,它似乎是删除生成的代码的已编译类。正如您所料,这意味着测试失败,因为生成的类的测试无法再找到他们试图测试的类!
如何保持IntelliJ的默认"在发布之前构建"没有编译生成的类的行为在运行测试时会被吹走?
现在了解一些细节。
我使用Immutables库(不是Lombok),因此使用" normal"生成的代码Java注释机制。 IntelliJ很乐意接受更改并通过注释生成Java代码。它还将在更改时编译更新的生成的Java文件。所以,一般"自动构建"行为似乎有效。对我而言,这似乎表明我已经正确设置了Annotation处理器。
当我手动运行"构建模块"或者当" Build"但是,在测试之前运行,将删除生成的Java文件的类文件。生成的Java文件不会以任何方式更改,但会删除它们编译到的类文件。对我来说,这意味着Build中没有注意Generated Source依赖关系。
我注意到的一件事是,如果我没有标记生成源作为生成源根目录的目录,那么"删除生成的类文件源文件"行为并没有发生。这样做的缺点是IntelliJ不再识别生成的类,并在使用它们的代码中将它们标记为未知。
我如何配置IntelliJ:
Preferences -> Annotation Processors
正在使用Module content root
,Obtain processors from project classpath
,并且已指定生产和测试源目录字段(并且在生成源文件时似乎尊重这些字段)Preferences -> Compiler
不使用Clear output directory on rebuild
而 使用Build project automatically
File -> Other Settings -> Annotation Processors
具有与上述两点相同的配置我长期以来一直抨击我的头脑,试着我能想到的一切以及任何人甚至暗示的一切,但无济于事。任何有关如何使这项工作的帮助(除了"从测试配置中移除构建选项")将会非常有用并且深受赞赏。
答案 0 :(得分:1)
我遇到了同样的问题(对我而言)是通过删除Atlassian Clover插件来解决的。