在Eclipse中从Java程序运行JUnit

时间:2014-06-19 09:58:26

标签: java eclipse maven junit

我第一次使用JUnit,而我被要求做的是以编程方式通过调用'来运行Junit测试。它来自一个java程序。 (所有这些都在Eclipse中) 请注意,右键单击包含Junit测试的文件并选择“Run as Junit test'工作得非常好。下面是我在eclipse中的项目结构(由于我是新用户,因此无需粘贴图像,因此提供链接) -

http://postimg.org/image/gplfswqm1/

我用maven来获得所需的所有罐子。我也粘贴了pom.xml,以防结果相关 -

            <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
              <modelVersion>4.0.0</modelVersion>
              <groupId>com.so.generic.automation</groupId>
              <artifactId>GenericAutomation</artifactId>
              <version>1.0</version>

              <properties>
                    <maven.compiler.version>2.3.2</maven.compiler.version>
                    <selenium.version>2.39.0</selenium.version>
                    <junit.version>4.11</junit.version>
                </properties>

                <build>
                    <resources>
                        <resource>
                            <directory>src/main/java</directory>
                        </resource>
                        <resource>
                            <directory>src/main/resources</directory>
                        </resource>
                    </resources>
                    <testResources>
                        <testResource>
                            <directory>src/test/java</directory>
                        </testResource>
                        <testResource>
                            <directory>src/test/resources</directory>
                        </testResource>
                    </testResources>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>${maven.compiler.version}</version>
                            <configuration>
                                <encoding>UTF-8</encoding>
                                <source>1.6</source>
                                <target>1.6</target>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>

                <dependencies>
                    <dependency>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>selenium-firefox-driver</artifactId>
                        <version>${selenium.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.seleniumhq.selenium</groupId>
                        <artifactId>selenium-support</artifactId>
                        <version>${selenium.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>${junit.version}</version>
                        <scope>test</scope>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.poi</groupId>
                        <artifactId>poi-ooxml</artifactId>
                        <version>3.10-FINAL</version>
                    </dependency>
                    <dependency>
                        <groupId>org.eclipse.core</groupId>
                        <artifactId>org.eclipse.core.resources</artifactId>
                        <version>3.7.100</version>
                    </dependency>
                    <dependency>
                        <groupId>org.eclipse.jdt</groupId>
                        <artifactId>core</artifactId>
                        <version>3.3.0-v_771</version>
                    </dependency>


                </dependencies>

            </project>

在src / main / java中,我的Java程序在Framework.java文件中 在src / test / java中,我有一个名为ProjectSpecificTests.java的Junit测试

我需要做的是以某种方式从Framework.java中运行此ProjectSpecificTests.java。我尝试从Java代码启动命令提示符并调用java -cp .....,但我无法清楚地理解我应该通过哪些参数,因为我不断收到NoClassDefFoundException,ClassNotFoundException等的错误。如果我明确的话提到罐子的位置,就像这里 -

            javac -cp "C:\\Users\\himanshuc\\.jenkins\\war\\WEB-INF\\lib\\hamcrest-core-1.3.jar";"C:\\Users\\himanshuc\\.m2\\repository\\org\\seleniumhq\\selenium\\selenium-firefox-driver\\2.42.0";"C:\\Users\\himanshuc\\.m2\\repository\\org\\seleniumhq\\selenium\\selenium-api\\2.42.0";"C:\\Users\\himanshuc\\.m2\\repository\\org\\seleniumhq\\selenium\\selenium-parent\\2.42.0";"C:\\Users\\himanshuc\\.m2\\repository\\org\\seleniumhq\\selenium\\selenium-remote-driver\\2.42.0";"C:\\Users\\himanshuc\\.m2\\repository\\org\\seleniumhq\\selenium\\selenium-support\\2.42.0";"C:\\Users\\himanshuc\\.m2\\repository\\junit\\junit\\4.11\\junit-4.11.jar" org.junit.runner.JUnitCore ProjectSpecificTests.java

我是从文件夹里面运行的 -

            G:\FrameWorkSpace_HC\GenericAutomation\src\test\java\com\so\junit\tests

然后抛出新的错误消息,如 -

            ProjectSpecificTests.java:8: error: package com.so.generic.framework does not ex
            ist
            import com.so.generic.framework.Framework;
                                           ^
            ProjectSpecificTests.java:12: error: cannot find symbol
                    static Framework objFramework;
                           ^
              symbol:   class Framework
              location: class ProjectSpecificTests
            error: Class names, 'org.junit.runner.JUnitCore', are only accepted if annotatio
            n processing is explicitly requested
            ProjectSpecificTests.java:18: error: cannot find symbol
                            objFramework = new Framework();
                                               ^
              symbol:   class Framework
              location: class ProjectSpecificTests
            4 errors

任何人都可以指导我在这里缺少什么?我可以使用任何解决方案来实现最终结果,而不一定是命令提示符。

如果问题描述太长,我很抱歉。这是我第一次尝试在这个论坛上提问。如果我犯了任何错误,请道歉。

1 个答案:

答案 0 :(得分:0)

呼!现在就开始工作了。以下是面向类似问题的任何人的解决方案,需要详细的解决方案 -

对于普通的JAVA文件

  • 编译它。我需要进入包含我的java文件(Framework.java)的文件夹。现在,在这个文件中,我调用了其他文件中定义的方法。因此,仅编译此文件会引发错误。所以,我必须这样做 -

    javac -cp <list of all jars separated by ;> *.java
    

如,

    javac -cp "C:\Program Files\Java\jre8\lib\ext\sunmscapi.jar";"C:\Program Files\Java\jre8\lib\ext\sunpkcs11.jar";"C:\Program Files\Java\jre8\lib\ext\zipfs.jar"; *.java
  • 运行此功能。我的Framework.java文件位于文件夹C:\ abc \ xyz \ src \ main \ java \ com \ so \ generic \ framework \ Framework.java下,因此要确保java可以跟踪包com.so.generic.framework,我向上移动了几个文件夹直到'java'并从那里打开命令提示符。然后我打字 -

    java -cp "C:\Program Files\Java\jre8\lib\ext\sunpkcs11.jar";"C:\Program Files\Java\jre8\lib\ext\zipfs.jar";"G:\abc\xyz\src\main\java" com.so.generic.framework.Framework
    

请注意在类路径中添加最后一个参数“G:\ abc \ xyz \ src \ main \ java”以使其工作。

适用于JUnit测试 编译过程保持完全相同。但是要运行,我们需要更改最后一位。我们不是简单地编写com.so.generic.framework.Framework(在本例中为com.so.junit.tests.ProjectSpecificTests),而是写下这个 -

    java -cp "C:\Program Files\Java\jre8\lib\ext\sunpkcs11.jar";"C:\Program Files\Java\jre8\lib\ext\zipfs.jar";"G:\abc\xyz\src\main\java";"G:\FrameWorkSpace_HC\GenericAutomation\src\test\java" org.junit.runner.JUnitCore com.so.junit.tests.ProjectSpecificTests

希望这对其他人有用。