如何在不创建循环依赖关系的情况下创建可重用的测试代码?

时间:2016-02-16 19:33:02

标签: java maven hamcrest clover

考虑两个项目。

  • myCompany的-FOO
  • myCompany的-FOO检验

在mycompany-foo中,我定义了一些我想在许多其他项目中使用的对象。为了便于代码重用,mycompany-foo-tests定义了可以匹配mycompany-foo对象的hamcrest匹配器。

问题是mycompany-foo-tests将依赖于mycompany-foo,以便我为它创建匹配器。然后mycompany-foo将依赖于mycompany-foo-tests,这样我就可以在mycompany-foo的测试中做一些匹配。这会产生循环依赖。我想避免的东西。

我通过简单地将匹配器添加到mycompany-foo,删除“tests”项目,并将包含匹配器的测试jar导出为“test-jar”来解决这个问题。

一切都进展顺利,直到我得知Atlassian的三叶草安装了它在我的m2 repo [1]中创建的文物。这会覆盖我的测试jar并导致下游项目在无法初始化我的匹配器的三叶草版本时失败。

我看到的建议是不要创建一个测试jar,而是回到我以前做过的事情。也就是说,为匹配者提供一个完整的独立项目。有没有办法在不创建循环依赖的情况下做到这一点?

[1] https://jira.atlassian.com/browse/CLOV-331

1 个答案:

答案 0 :(得分:2)

  1. 不要将生产代码及其测试/测试工具分成不同的项目。
  2. 不要为您的对象编写匹配器,有些工具可以为您执行此操作(例如shazamcrest)。