我的父pom包含定义maven-surefire-plugin
和maven-failsafe-plugin
参数的<groups>
和<excludedGroups>
配置,如下所示,使用我的接口com.adam.testutil.IntegrationTest
作为JUnit 4 {{ 1}}注释,将任何测试标记为集成测试。
父pom下的所有模块(不仅仅是那些带有集成测试的模块)在其类路径上都需要@Category
,以便运行surefire和failafe插件,否则它们会抛出com.adam.testutil.IntegrationTest
。
因此,类必须位于所有模块必须声明为依赖项的模块中。我宁愿将它声明为父pom中的依赖项 所以所有模块都自动继承它,但这会产生一个循环依赖问题,阻止mvn运行。
事实上,即使模块中没有单元或集成测试,模块仍然必须声明依赖项。
我还必须使包含ClassNotFoundException
的模块成为构建顺序中的第一个模块,否则它将无法在任何新系统的首次安装中使用。我遇到了鸡与蛋的困境 - 我不能在空白存储库中运行com.adam.testutil.IntegrationTest
,因为mvn install
的依赖关系尚未在本地存储库中。
事实上,我并不特别想创建一个新模块来提供IntegrationTest
。如果JUnit在库中包含了一个合适的IntegrationTest
类,那就简单多了。
虽然我认为org.junit.IntegrationTest
是一种很好的方法来注释测试以将它们标记为集成测试,但在多模块项目中它具有所有这些缺点。
我可以使用某个相关或适当命名的界面而不必拥有自己的界面吗?
在最糟糕的情况下,就JUnit,@Cateogry
,maven-surefire-plugin和maven-failsafe-plugin而言,我可以使用JDK中的接口,例如: java.lang.Cloneable - 尽管任何阅读代码的人都会想知道到底发生了什么。
我曾希望JUnit会有所收获,但我找不到任何有用的东西。
我可以在我的父pom中依赖第三方库,一切都会好的。
我会接受任何建议来自第三方库的合适界面的人的答案,其中界面的名称不会立即引起任何人第一次阅读代码的问题。
@Category
import org.junit.experimental.categories.Category
import com.adam.testutil.IntegrationTest
@Category(IntegrationTest.class)
public DbAndJpaIntegrationTests {
...
}
答案 0 :(得分:1)
你的问题似乎表明IntegrationTest
接口的目的只是标记哪些测试是由surefire执行的,哪些是由failafe执行的。
在这种情况下,您可以使用命名约定。 故障保护的默认值是 described in the docs:
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
对于万无一失,the defaults are:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
答案 1 :(得分:0)
如果 ..你的大多数模块需要.. 界面,你可以在一个单独的模块中声明你的import pandas as pd
import numpy as np
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn import neighbors
from sklearn import cross_validation
df = pd.DataFrame(np.random.rand(12, 5))
label=np.array([1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3])
df['label'] = label
df1 = pd.concat(g.sample(2) for idx, g in df.groupby('label'))
X = df1[[0,1,2,3,4]].values
y = df1.label.values
clf = neighbors.KNeighborsClassifier(n_neighbors=2)
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.35)
scoresSSS = cross_validation.cross_val_score(clf, X, y, cv=sss.split(X, y))
print(scoresSSS)
(虽然我建议不只是一个界面,但试着把与该接口相关的事情以及该模块)。让我们通过名称IntegrationTest
来调用它来获取工件。
我更愿意将它声明为父pom中的依赖项 模块会自动继承它,但这会创建一个循环 阻止mvn运行的依赖性问题。
integration-test
中声明依赖关系不是必须的。尽管使用pom.xml
这样做可以更好地使用维护的<dependencyManagement>
工件版本。 Read more about it in the doc。事实上,即使模块中没有单元或集成测试, 该模块仍然必须声明依赖。
integration-test
工件依赖项。我还必须使模块包含 com.adam.testutil.IntegrationTest构建顺序中的第一个模块, 否则它将无法在任何新的首次安装中使用 系统
integration-test
将在依赖于它的同一项目中的任何模块之前构建。事实上,我并不特别想要创建一个新模块 提供IntegrationTest。如果JUnit有这么简单的话 在库中包含了一个合适的org.junit.IntegrationTest类。
那里有一个方便的界面吗?我可以放一个 在我的父母pom中依赖它,一切都会好的。
integration-test
接口有用,否则我怀疑它可以包含在IntegrationTest
lib中。对于一个方便的界面也是如此,你的界面junit
试图做的是什么,值得将是最终的问题。 IntegrationTest
可能非常方便。 pom.xml
个人模块方法。