错误:包org.testng.annotations不存在[javac] import org.testng.annotations.Test;

时间:2015-09-21 14:33:22

标签: java ant testng

我有一个简单的项目,我正在尝试使用Ant构建。我的项目包含testng,但是当我尝试运行构建时收到错误消息。请你帮助我好吗?我花了很多时间试图看看问题是什么,但到目前为止没有任何结果。

这是项目:

package selenium;

import org.testng.annotations.Test;

public class HomePage {

    @Test
    public void test(){

        System.out.println("this is test");
    }
}

现在我有一个包含testng.jar的lib文件,我有一个运行该类的test.xml套件,这是我的构建文件:

    <?xml version="1.0" encoding="UTF-8"?>

<project name="Concep.TestAutomation" basedir="." default="all">

	<property name="src.dir" value="${basedir}/src" />
	<property name="build.dir" value="target" />
	<property name="classes.dir" value="${build.dir}/classes" />	
	<property name="suites.dir" value="suites" />
	<property name="testng.path" value="lib/testng.jar" />
	
	<property name="testreport.dir" value="${build.dir}/test-output" />
	
	<target name="clean" description="Delete the build directory.">
		<delete dir="${build.dir}" />
	</target>

	<target name="init" depends="clean" description="Create build directories.">
		<!--Create the build directory structure used by compile -->
		<mkdir dir="${build.dir}" />
		<mkdir dir="${classes.dir}" />
		<mkdir dir="${testreport.dir}" />
	</target>

	<target name="compile" depends="init" description="Compile tests.">
		<!-- Compile the java code from ${src} into ${classes.dir} -->
		<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true" />
	</target>

	<target name="run-test" depends="compile" description="Run test suite.">
		<!-- Run a testng suite-->
		<taskdef resource="testngtasks" classpath="${testng.path}" />

		<testng classpathref="${testng.path}" outputDir="${testreport.dir}" haltonfailure="true" verbose="5">
			<xmlfileset dir="${suites.dir}" includes="IA-smoke-test.xml" />
			</testng>
	</target>

	<target name="all" depends="run-test" description="Executes all targets." />
	
		<target name="all-debug" description="outputs all vars in use.">
  <!-- useful to diagnose runtime problems --> 
       <echo message="'work.dir' = '${basedir}/..'"/>
       <echo message="'lib.dir' = '${basedir}/lib'"/>
       <echo message="'src.dir' = '${basedir}/src'"/>
       <echo message="'config.dir' = '${basedir}/config'"/>
       <echo message="'build.dir' = 'target'"/>
       <echo message="'classes.dir' = '${build.dir}/classes'"/>
       <echo message="'suites.dir' = '${basedir}/suites'"/>
       <echo message="'testng.path' = '${basedir}/lib/testng.jar'"/>
     </target>

</project>

2 个答案:

答案 0 :(得分:2)

即使我遇到过这个问题也得到了同样的解决方案。

在你的pom.xml文件中删除范围,这应该可以正常工作。

根据pom.xml中的以下代码,删除范围标记。

即使我们已经为Testng导入了maven依赖项,但是当您在XML文件中添加范围标记时,它会将其视为JUnit注释而不是Testng。因此,当我删除范围标记时,My @Test Annotation被视为Testng Annotation。

<dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.7</version>
            **<scope>test</scope>** //Remove this line and compile maven
</dependency>

答案 1 :(得分:0)

所以在这里我如何修复问题,在编译目标上缺少一个属性,即“classpathref”,项目从中看到编译它所需的所有库,没有项目看不到的“classpathref”任何外部系统,所以我已经做了以下修复,

<path id="build.classpath">
		<fileset dir="${lib.dir}" includes="**/*.jar" />
		<fileset dir="${src.dir}/concep/selenium/core" includes="**/*.java" />
	</path>

在我的编译目标中,我添加了以下属性

<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="build.classpath" debug="true" includeantruntime="false"/>