JUnit TestClass не распознает класс

Я пишу свой первый тестовый класс junit. Мой класс calculate.java находится в моем каталоге src, а мой тестовый класс (CalculatorTest.java) - в каталоге test/src. Моя проблема в том, что класс CalculatorTest не распознает класс калькулятора. Какие-нибудь мысли? Вот мой класс calculate.java в каталоге src:

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;
}
}

И это мой класс CalculatorTest в каталоге test/src:

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();

Спасибо


person Hamid_UMB    schedule 19.11.2016    source источник
comment
возможно, ваш путь к классам существует.   -  person nail fei    schedule 19.11.2016
comment
Оба ваших класса в разных пакетах?   -  person Vikas Sachdeva    schedule 19.11.2016


Ответы (5)


Мой класс calculate.java находится в моем каталоге src, а мой тестовый класс (CalculatorTest.java) - в каталоге test/src. Моя проблема в том, что класс CalculatorTest не распознает класс калькулятора. Какие-нибудь мысли?

Ваша структура папок кажется неправильной, и вам нужно иметь структуру папок, как показано ниже:

Calculator.java -> src/main папка

CalculatorTest.java -> src/test папка

person developer    schedule 19.11.2016
comment
Я разместил свой файл build.xml. Я подозреваю, что проблема в этом файле. Не могли бы вы его посмотреть? Благодарность - person Hamid_UMB; 19.11.2016

Вам нужно будет импортировать класс Calculator

Обычно классы приложения находятся в исходной папке или папке src/main, тогда как тестовые классы находятся в папке src/test.

Поэтому вам нужно будет убедиться, что класс Calculator импортирован в ваш тестовый класс, то есть CalculatorTest.

person Pritam Banerjee    schedule 19.11.2016
comment
Я хочу, чтобы мои тестовые классы находились в отдельной папке (тестовой папке), а не в папке src/test. - person Hamid_UMB; 19.11.2016

Поскольку ваши классы находятся в разных каталогах,

Импортируйте класс Calculator в свой класс CalculatorTest и повторите попытку.

Надеюсь это поможет.

person Supratika Banerjee    schedule 19.11.2016
comment
Спасибо ... Я импортировал класс Calculator, а также использую те же имена пакетов ... но все равно не работает. - person Hamid_UMB; 19.11.2016

Суммируя ответ @javaguy, убедитесь, что пакеты одинаковы. Если вы хотите использовать класс Calculator без предложения импорта, вам необходимо иметь оба класса, Calculator и CalculatorTest, в одном пакете.

person ablurb    schedule 19.11.2016
comment
Я отредактировал свой ответ, используя ваше предложение. Но все равно не повезло - person Hamid_UMB; 19.11.2016

Основные классы должны находиться в папке src/main/java
, а
тестовые классы должны находиться в папке src/test/java
.

Если все в правильных местах, а основные классы по-прежнему недоступны, то
Щелкните правой кнопкой мыши проект => Maven => Обновить проект
Надеюсь, это решит проблему.

person G R    schedule 05.07.2019