2016-11-19 147 views
0

我正在編寫我的第一個junit測試類。我的calculator.java類在我的src目錄下,我的測試類(CalculatorTest.java)在test/src目錄下。我的問題是CalculatorTest類不能識別計算器類。有什麼想法嗎?這是在src目錄我calculator.java類:JUnit TestClass無法識別類

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

而且這是在測試/ 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(); 

感謝

+0

也許你的classpath存在缺陷。 –

+0

你們兩個班是不同的包? –

回答

0

您需要導入類Calculator

通常,應用程序類是根據源或src/main文件夾,而測試類位於src/test目錄。

所以,你必須確保該Calculator類是在您的測試類即CalculatorTest進口。

+0

我想讓我的測試類在單獨的文件夾(測試文件夾)中,而不是在src/test文件夾中。 –

1

My calculator.java class is in my src direcotry and my test class (CalculatorTest.java) is in test/src directory. My problem is that CalculatorTest class does not recognize the calculator class. Any thoughts?

您的文件夾結構似乎不正確的,你需要有文件夾結構如下圖所示:

Calculator.java - >src/main文件夾

CalculatorTest.java - >src/test文件夾

+0

我發佈了我的build.xml文件..我懷疑問題出在這個文件中..你能看看嗎?謝謝 –

0

由於您的類在不同的目錄中,

導入Calculator班級在您的CalculatorTest班,然後再試一次。

希望這會有所幫助。

+0

謝謝...我導入了Calculator類,並且我使用了相同的包名稱,但仍然不起作用。 –

0

總結到@javaguy的答案,確保包是相同的。如果你想使用沒有導入語句的Calculator類,你需要在同一個包中包含Calculator類和CalculatorTest類。

+0

我使用你的建議編輯了我的答案。但仍然沒有運氣 –