【问题标题】:JUnit TestClass does not recognize ClassJUnit TestClass 无法识别 Class
【发布时间】:2016-11-19 07:09:43
【问题描述】:

我正在编写我的第一个 junit 测试类。我的calculator.java 类在我的src 目录中,我的测试类(CalculatorTest.java)在test/src 目录中。我的问题是 CalculatorTest 类无法识别计算器类。有什么想法吗?这是我在 src 目录中的calculator.java 类:

package edu.umb.cs.cs680.unittest;

public class Calculator {
public float multiply(float x, float y){
    return x*y;
}

public float divide(float x, float y){
    if(y==0){
        throw new IllegalArgumentException("division by zero");
    }
    return x/y;
}
}

这是我在 test/src 目录中的 CalculatorTest 类:

package edu.umb.cs.cs680.unittest;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.junit.Test;
import edu.umb.cs.cs680.unittest.Calculator;

public class CalculatorTest{
@Test
public void multiply3By4(){
    Calculator cut = new Calculator();
    float expected = 12;
    float actual = cut.multiply(3,4);
    assertThat(actual, is(expected)); 
}

@Test
public void divide3By2(){
    Calculator cut = new Calculator();
    float expected = 1.5f;
    float actual = cut.divide(3,2);
    assertThat(actual, is(expected)); 
}

@Test(expected=IllegalArgumentException.class)
    public void divide5By0(){
    Calculator cut = new Calculator();
    cut.divide(5,0); 
}
}

这是我的 build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project default="runjunit" name="ant project">
<property environment="env"></property>
<property name="ECLIPSE_HOME" value="${env.ECLIPSE_HOME}"></property>
<property name="junit.output.dir" value="test/bin/edu/umb/cs/cs680/unittest"></property>
<property name="bin.dir" value="bin/edu/umb/cs/cs680/unittest"></property>

<path id="JUnit 4.libraryclasspath">
    <pathelement location="lib/junit.jar"/>
    <pathelement location="lib/org.hamcrest.core_1.3.0.v201303031735.jar"/>     
</path>
<path id="HW4.classpath">       
    <path refid="JUnit 4.libraryclasspath"/>
</path>

<target name="compile">
    <mkdir dir="${bin.dir}"/>
    <mkdir dir="${junit.output.dir}"/>
    <javac includeantruntime="false" srcdir="./src" destdir="./bin" >           
        <classpath refid="HW4.classpath"></classpath>
    </javac>
    <javac includeantruntime="false" srcdir="./test/src" destdir="./test/bin" >         
        <classpath refid="HW4.classpath"></classpath>
    </javac>
</target>
<target name="clean">
    <delete dir="./bin"/>
    <delete dir="./test/bin"/>
</target>
<target name="runjunit" depends="compile">
    <junit printsummary="yes" haltonfailure="yes">
        <path refid="JUnit 4.libraryclasspath" />
        <!--<test name="test.src.edu.umb.cs.cs680.unittest.CalculatorTest" />-->
        <test name="x.CalculatorTest" />

        <classpath refid="HW4.classpath"></classpath>
    </junit>
</target>
</project>

这是错误:

cannot find symbol Calculator cut = new Calculator();

谢谢

【问题讨论】:

  • 可能你的类路径存在缺陷。
  • 你的两个类在不同的包里吗?

标签: java eclipse junit build.xml


【解决方案1】:

我的calculator.java 类在我的 src 目录和我的测试类中 (CalculatorTest.java) 位于 test/src 目录中。我的问题是 CalculatorTest 类不识别计算器类。任何 想法?

您的文件夹结构似乎不正确,您需要具有如下所示的文件夹结构:

Calculator.java -> src/main 文件夹

CalculatorTest.java -> src/test 文件夹

【讨论】:

  • 我发布了我的 build.xml 文件。我怀疑问题出在这个文件中。你能看看吗?谢谢
【解决方案2】:

你需要导入类Calculator

通常应用程序类位于源或src/main 文件夹下,而测试类位于src/test 目录下。

因此,您必须确保将 Calculator 类导入到您的测试类中,即 CalculatorTest

【讨论】:

  • 我想将我的测试类放在单独的文件夹(测试文件夹)中,而不是放在 src/test 文件夹中。
【解决方案3】:

由于您的类位于不同的目录中,

在您的CalculatorTest 类中导入Calculator 类,然后重试。

希望这会有所帮助。

【讨论】:

  • 谢谢...我导入了 Calculator 类,而且我使用相同的包名.. 但仍然无法正常工作。
【解决方案4】:

总结为@javaguy 的答案,确保包是一样的。如果要使用不带 import 语句的 Calculator 类,则需要将 Calculator 和 CalculatorTest 这两个类放在同一个包中。

【讨论】:

  • 我使用您的建议编辑了我的答案。但仍然没有运气
【解决方案5】:

主类应该在 src/main/java

测试类应该在 src/test/java

如果所有内容都在正确的位置并且仍然无法访问主要类,那么
右键单击项目 => Maven => 更新项目
希望这样可以解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2011-04-11
    相关资源
    最近更新 更多