通用技术 ant 生成 执行测试程序 报告总报 java.lang.ClassNotFoundException 求解

叶子 · 2015年02月27日 · 最后由 Unmurphy 回复于 2016年06月19日 · 1775 次阅读

我想在 build 文件中实现运行测试程序,并输出 html 形式的报告,现在总报一个 java.lang.ClassNotFoundException: com.ktplay.testing.KTAllTestSuite 的错,但我程序中是有这个类的
错误 log 如下:


E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing>ant -buildfile build3.xml report
Buildfile: E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing\build3.xml

cleanReport:
   [delete] Deleting directory E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing\report

test:
    [mkdir] Created dir: E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing\report
    [junit] Running com.ktplay.testing.KTAllTestSuite
    [junit] Testsuite: com.ktplay.testing.KTAllTestSuite
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
    [junit]
    [junit]     Caused an ERROR
    [junit] com.ktplay.testing.KTAllTestSuite
    [junit] java.lang.ClassNotFoundException: com.ktplay.testing.KTAllTestSuite
    [junit]     at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    [junit]     at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    [junit]     at java.security.AccessController.doPrivileged(Native Method)
    [junit]     at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    [junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    [junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    [junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    [junit]     at java.lang.Class.forName0(Native Method)
    [junit]     at java.lang.Class.forName(Class.java:259)
    [junit]
    [junit] Test com.ktplay.testing.KTAllTestSuite FAILED

report:
    [mkdir] Created dir: E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing\report\html
[junitreport] Processing E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing\report\TESTS-TestSuites.xml to C:\Users\KTplay\AppData\Local\Temp\null1510513641
[junitreport] Loading stylesheet jar:file:/D:/ant/apache-ant-1.9.4/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] Transform time: 285ms
[junitreport] Deleting: C:\Users\KTplay\AppData\Local\Temp\null1510513641

BUILD SUCCESSFUL
Total time: 1 second

E:\ktplay-android-sdk\sdk\ktplay_testing\ktplay_testing>


cmd 执行错误图片

我的 build3.xml 如下:

<target name="test" depends="cleanReport">
        <mkdir dir="report" />
        <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="yes">
            <formatter type="plain" usefile="false" />
            <formatter type="xml" />
            <test name="com.ktplay.testing.KTAllTestSuite" todir="report" />
            <classpath refid="JUnit 4.libraryclasspath" />
        </junit>
    </target>

    <target name="report" depends="test">
        <mkdir dir="report/html" />
        <junitreport todir="report">
            <fileset dir="report">
                <include name="TEST-*.xml" />
            </fileset>
            <report todir="report/html" />
        </junitreport>
    </target>
<test name="com.ktplay.testing.KTAllTestSuite" todir="report" />

KTAllTestSuite 类如下

package com.ktplay.testing;

import junit.framework.Test;
import junit.framework.TestSuite;

import com.ktplay.testing.accountmanager.KTAccountManagerTestSuite;
import com.ktplay.testing.friendship.KTFriendshipTestSuite;
import com.ktplay.testing.leaderboard.KTLeaderboardTestSuite;
import com.ktplay.testing.login.KTLoginTest;

public class KTAllTestSuite 
{
    public static Test suite()
    {
        TestSuite suite = new TestSuite();

        suite.addTestSuite(KTLoginTest.class);
        suite.addTest(KTAccountManagerTestSuite.suite());
        suite.addTest(KTLeaderboardTestSuite.suite());
        suite.addTest(KTFriendshipTestSuite.suite());
        return suite;
    }


}

代码结构如下图:

求大神帮忙看一下是什么问题

下图是最终生成的报告效果,如果正常运行,应该就是我要的效果了

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 8 条回复 时间 点赞

KTAllTestSuite的 import 展开看看。
最好还是直接贴代码吧。截图看得很累……

你 build xml 里面的 测试 class 没指定啊

#2 楼 @lihuazhang 怎么指定

#1 楼 @chenhengjie123 都贴代码了,再帮忙看一下

#4 楼 @emily 怎么指定,自己去看下 ant 的基础配置啊。你要做这个,ant 不去基础的看下,想走捷径怎么可能呢

#3 楼 @emily

<?xml version="1.0" encoding="utf-8"?>
<project name="test" default="test" basedir=".">

       <!--配置基本属性-->
       <property name="src" value="src"/>
       <property name="build" value="build"/>
       <property name="lib" value="lib" />
       <property name="dist" value="dist"/>
       <property name="classpath" location="${build}"/>

       <!--配置测试报告的属性-->
       <property name="report"   value="report"/>
       <property name="report.xml"  value="${report}/junit/xml"/>
       <property name="report.html" value="${report}/junit/html"/>

       <!--配置运行时classpath-->
       <path id="classpath.run">
              <pathelement path="${classpath}"/>
              <fileset dir="${lib}">
                     <include name="*.jar"/>
              </fileset>
       </path>

  <!--配置测试时classpath-->
       <path id="classpath.test">
              <path refid="classpath.run"/>
              <path location="${dist}/lib/test-${DSTAMP}.jar"/>
       </path>

       <!--任务初始化-->
       <target name="init" >
              <tstamp/>
              <delete dir="${build}"/>
              <delete dir="${report}"/>
              <delete dir="${dist}"/>
              <mkdir dir="${build}"/>
       </target>

       <!--配置编译任务-->
       <target name="compile" depends="init">
              <javac srcdir="${src}" destdir="${build}">
              <classpath refid="classpath.run" />
              </javac>
       </target>

       <!--配置打包任务-->
       <target name="dist" depends="compile">
              <mkdir dir="${dist}/lib"/>
              <jar jarfile="${dist}/lib/test-${DSTAMP}.jar" basedir="${build}"/>
       </target>

       <!--配置运行任务-->
       <target name="run" depends="compile, dist">
         <java classname="com.test.TestCalculator">
             <classpath>
                     <path refid="classpath.run"/>
              </classpath>
         </java>
       </target>

       <!--配置JUnit测试,打印测试结果-->
       <target name="test" depends="compile, dist">
              <mkdir dir="${report.xml}"/>
              <mkdir dir="${report.html}"/>
              <junit printsummary="yes" haltonfailure="no">
                     <classpath refid="classpath.run"/>
                     <formatter type="xml"/>
                     <batchtest fork="yes" todir="${report.xml}">
                            <fileset dir="${src}" includes="**/Test*.java"/>
                     </batchtest>
              </junit>
              <junitreport todir="${report.html}">
                     <fileset dir="${report.xml}">
                            <include name="*.xml"/>
                     </fileset>
                     <report format="frames" todir="${report.html}"/>
              </junitreport>
       </target>

</project>

用 ant 来维护, 是自讨苦吃啊. 为什么不用 maven 哪.
提示是找不到类, 你可以先试试通过 cp 参数指定下看看, 如果可以就自己添加进配置吧.

你好,请问你这个问题后来解决了么?我看到你另外一个帖子的意思是这个问题未能解决? 可以方便联系一下么?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册