我的JUnit测试在Eclipse中运行时有效,但有时会通过Ant随机失败

smu*_*kes 7 java eclipse memory ant junit

我的问题的核心是我担心我的Ant构建文件缺少允许测试完成并自我清理的东西.详情如下.

我有一套测试,当我通过Eclipse运行它时总是会通过,但是当我使用我的Ant构建运行它时,有时会通过或失败.测试通过JOCL使用openCL,因此我在GPU上的内存有限,必须正确管理.有时当我运行我的Ant构建时,我在输出中得到了这个,

[junit]     Caused an ERROR
[junit] CL_MEM_OBJECT_ALLOCATION_FAILURE
[junit] org.jocl.CLException: CL_MEM_OBJECT_ALLOCATION_FAILURE
Run Code Online (Sandbox Code Playgroud)

问题不在于测试本身.我认为在套件的最后调用了我最需要内存的测试.当调用最后一次测试时,不知何故GPU从我之前的测试中处于不良状态.当我通过Eclipse运行测试时,这不会发生.当我让内存饥饿测试套件中的第一个测试时,它在我的Ant构建中从未失败过.这是一个熟悉的案例吗?为什么通过Eclipse运行测试始终有效?有什么我可以尝试的吗?

这是我的Ant构建中的测试目标:

<target name="test" if="testing.enabled">
    <mkdir dir="${test.bin.dir}" />
    <javac srcdir="test" destdir="${test.bin.dir}" debug="true" classpathref="testclasspath" source="1.6"/>
    <junit haltonerror="true" haltonfailure="true">
        <classpath refid="testclasspath"/>
        <formatter type="plain" usefile="false" />
        <batchtest>
            <fileset dir="test">
                <include name="*Test.java"/>
            </fileset>
        </batchtest>
    </junit>
</target>
Run Code Online (Sandbox Code Playgroud)

rsp*_*rsp 5

如果您确定在代码中没有遗漏剩余的清理,您可以创建一个JUnit测试套件并从eclipse和ant运行它.通过创建测试套件,您可以独立于eclipse(项目中的顺序?)和ant(文件系统中的顺序?)的测试顺序,在两种情况下都使用并自行确定顺序.

如果你真的不确定你的代码是无问题的,你可以通过调用Collections.shuffle()测试类列表来启动测试套件,在eclipse中引入未知的测试执行顺序,看看你的测试是否仍然没有失败.