运行 gradle 构建。
编译工作正常,但在 :test 任务期间出现错误,即测试失败。
输出是:
com.tr.ids.biz.domain.TestAttributeDescriptorBeanProvider > testGetAttributeHandler FAILED
java.lang.AssertionError at TestAttributeDescriptorBeanProvider.java:65
com.tr.ids.biz.domain.TestAttributeDescriptorBeanProvider > testGetSpringBeanWithExp FAILED
java.lang.AssertionError at TestAttributeDescriptorBeanProvider.java:60
com.tr.ids.biz.domain.pvt.dao.TestRdbmsDAOFactory > testCreateDAO FAILED
java.lang.AssertionError at TestRdbmsDAOFactory.java:90
83 tests completed, 3 failed
:test FAILED
如果您看到前 2 个失败的测试,则说明 Java fail() 失败,并且这些行的源代码 Java 文件快照是(忽略 line#,因为我使用了 can -n 命令)。第 60 行和第 65 行给出了错误。我尝试将第 60 + 61 + 62 行作为第 60 行加入一行,在 gradle 构建时出现同样的错误:
-bash-3.2$ cat -n test/java/com/tr/ids/biz/domain/TestAttributeDescriptorBeanProvider.java | egrep " *6[0-9]|70"
60 fail(BASE_NAME + ": Failed in 'setUp()' method: "
61 + exp.getMessage()
62 + exp.getCause());
63 } catch (SvcMockLibException exp) {
64
65 fail(BASE_NAME + ": Failed in 'setUp()' method: "
66 + exp.getMessage()
67 + exp.getCause());
68 }
69
70 }
-bash-3.2$
同样,第 90 行的第二个文件(显示下面的第 90、91、92 行)失败并包含以下代码:
assertEquals(
"Test1: Returned bean is not instance of RdbmsAttributeDescriptorDAO",
true, flag);
任何想法,为什么 assertEquals() 和 fail () 都失败了。
使用 ANT 编译的相同源代码可以正常工作并且不会出现这些错误。
执行单元测试部分的 ANT 代码是:
<!-- Execute the UNIT tests -->
<target name="test-junit" depends="init,classpaths,classpath-junit,compile-junit" >
<property name="test.junit.reports" value="junit-test-reports" />
<delete dir="${test.junit.reports}" />
<mkdir dir="${test.junit.reports}" />
<mkdir dir="${test.junit.reports}/xml" />
<junit printsummary="yes" haltonfailure="no" failureproperty="build.test.failure" >
<batchtest todir="${test.junit.reports}/xml" >
<fileset dir="${build.junit.classes}">
<include name="**/Test*.class" />
</fileset>
</batchtest>
<classpath>
<pathelement path="${test-junit.classpath}" />
</classpath>
<formatter type="xml" />
</junit>
<junitreport todir="${test.junit.reports}" >
<fileset dir="${test.junit.reports}/xml" >
<include name="TEST*.xml" />
</fileset>
<report format="frames" todir="${test.junit.reports}/html" />
</junitreport>
<fail if="build.test.failure" message="*** JUnit test cases did not pass. ***" />
</target>
<!-- Setup classpath for JUnit tests -->
<target name="classpath-junit" depends="init" >
<property name="build.src.java-junit" value="${build.home}/test/java" />
<property name="build.src.rsrc-junit" value="${build.home}/test/resources" />
<property name="build.junit.classes" value="${build.dest}/junit/classes" />
<path id="test-junit.classpath">
<path location="${build.junit.classes}" />
<path location="${build.dest.classes}" />
<path refid="build.classpath" />
<path location="${build.src.conf}" />
<path location="${build.home}" />
<path location="${build.src.rsrc-junit}" />
</path>
<property name="test-junit.classpath" refid="test-junit.classpath" />
</target>
<!-- Compile the JUnit source code -->
<target name="compile-junit" depends="init,classpaths,classpath-junit,compile" >
<delete dir="${build.junit.classes}"/>
<mkdir dir="${build.junit.classes}"/>
<javac
destdir="${build.junit.classes}"
debug="true"
debuglevel="lines,vars,source"
optimize="false"
deprecation="${build.compiler.deprecation}">
<classpath>
<path refid="build.classpath" />
<path refid="test-junit.classpath" />
</classpath>
<src path="${build.src.java-junit}"/>
</javac>
</target>
注意:当我为另一个项目尝试基于 ANT 的目标时,ANT / Gradle 在单元测试中都失败了,因此,ANT 代码确实在某些项目的测试中失败了,这些项目在 Gradle 中也失败了。但是我上面给出的案例在 ANT 中运行良好,但在 Gradle“gradle clean build”步骤(其中 build 也调用 :test 任务)中失败。