0

我想知道在以下情况下对项目/模块组织有什么建议:

  1. 我有一个项目DomainObjects,我有一个课程MyObject
    1. 在我/src/test/javaDomainObjects测试MyObject
  2. 我有一个项目Client依赖于DomainObjects

我想添加一个ParameterSupplier被调用的MyObjectTestSupplier类来提供测试实例MyObjectClient.

MyObjectTestSupplierDomainObjects项目中提供似乎是最有意义的。这是我的困境...

  1. 如果我将供应商放入其中src/test/javaDomainObjects它将无法提供给Client.
  2. 我不想把它放进去src/main/javaDomainObjects因为这意味着 JUnit 必须作为编译依赖DomainObjects包含在我的生产代码中。
  3. 如果我把供应商放在某个项目中,DomainObjectsTest我有三个选择
    1. 只放供应商是测试项目,但这意味着测试DomainObjects不能使用这个供应商。
    2. 将所有测试和供应商放入其中DomainObjectsDomainObjectsTest但这意味着DomainObjects即使测试失败,maven 也会成功编译
    3. src/test/java在ofDomainObjectssrc/main/javaof中复制供应商DomainObjectsTest

我想过尝试制作DomainObjectsTest一个模块,DomainObjects但只有在包装在DomainObjects这里pom不起作用的情况下才有效。

想法?建议?

编辑:作为解释,MyObject是一个简单的 bean(只是 getter 和 setter),我使用该ParameterSuppier模式来提供填充的 bean 实例。供应商提供实用方法来轻松创建 bean 的填充实例以用于测试。我这样做是为了在我的项目中不重复这个人口代码(或模拟等价物)。

4

2 回答 2

1

这是您所描述的一个糟糕的设计示例。您的单元测试不能依赖外部依赖项成为“单元”。

您需要做的是模拟所有依赖项并仅测试Client代码。根据您期望此类执行的操作,使用Mockito或您选择的其他库在客户端项目中创建模拟实例。在自己的项目中MyObject测试行为 - .MyObjectDomainObjects

在 mockito 创建一个 mock 只是:

import static org.mockito.Mockito.*;
...
MyObject myMock = mock(MyObject.class);
when(myMock.doWhatYouNeed(params)).thenReturn(whatYouExpect);

编辑:

另一个想法

将 DomainObjects 的测试发布test-jar此处描述的类型工件,并将其用作客户端中的测试范围依赖项。但这实在是太丑了……

不错的设计是:

  • DomainObjectAPI项目MyObject
  • DomainObjectTestSupplier使用DomainObjectAPI供应商,
  • DomainObject用于DomainObjectAPI编译和DomainObjectTestSupplier测试
  • Client使用DomainObjectAPI,DomainObject进行编译和DomainObjectTestSupplier测试。

这只是一个矫枉过正。

于 2012-10-25T16:25:17.123 回答
1

正如有关此特定主题的官方 Maven 迷你指南所说,您应该将项目的测试工件发布DomainObjects到本地 Maven 存储库(或您想要或能够的任何地方),并将该DomainObjects-X.Y-tests工件用作项目中的测试范围依赖项Client

发布测试工件是通过使用Maven JAR 插件jar:test-jar目标来完成的。

If you include this artifact as a test-scoped dependency in your Client project then any other project that depends on the Client project won't inherit your DomainObjects project's test artifact, because test-scoped dependencies are not transitive by default as stated by the official guide on Maven's dependency mechanism.

于 2012-10-26T04:24:45.337 回答