ปัญหาในการรันการทดสอบ JUnit อย่างง่ายผ่าน Ant บน eclipse

ฉันมีการทดสอบ JUnit ต่อไปนี้ใน eclipse:

package test;
import org.junit.Test;
public class SimpleJUnitTest
{
    @Test
    public void doTest() { System.out.println("Test did run"); }
}

และ build.xml ต่อไปนี้ในโฟลเดอร์เดียวกัน:

<?xml version="1.0" encoding="UTF-8"?>
<project name="LoggerTest" default="JUnitTest" basedir=".">
    <target name="JUnitTest">
            <junit>
                <classpath location="../../lib/junit.jar" />
                <test name="test.SimpleJUnitTest" />
            </junit>
        <echo>boo</echo>
    </target>
</project>

ถ้าฉันรันคลาสทดสอบภายใต้ "Run As..." และเลือก JUnit คลาสก็จะทำงานโดยไม่มีข้อผิดพลาด หากฉันรัน build.xml ภายใต้ "Run As..." และเลือก Ant Build ฉันจะได้ผลลัพธ์ต่อไปนี้:

Buildfile: C:\Users\995868\workspace\JUnit1\tst\test\build.xml
JUnitTest:
    [junit] Test test.SimpleJUnitTest FAILED
     [echo] boo BUILD SUCCESSFUL Total time: 390 milliseconds

หากฉันลบแอตทริบิวต์ classpath ภายใต้ JUnit ฉันจะได้รับข้อความแสดงข้อผิดพลาดอื่นเกี่ยวกับการต้องการ junit jar บน classpath ดังนั้นฉันคิดว่า JUnit กำลังถูกเรียกใช้ ฉันแค่ไม่เข้าใจว่ามันเกิดข้อผิดพลาดอะไรที่นี่ ฉันได้ลองใส่รหัสบล็อกแบบคงที่ในชั้นเรียนเพื่อทำ System.out.println() เมื่อคลาสถูกโหลด แต่มันไม่ปรากฏขึ้น ดูเหมือนว่าจะมีบางอย่างที่ฉันทำผิดในการกำหนดค่า

ใครช่วยบอกฉันหน่อยได้ไหมว่ามีอะไรผิดปกติที่นี่

แก้ไข:

directory structure:
JUnit1
--bin
  --test
    --SimpleJUnitTest
--lib
  --junit.jar
--scripts
  --build.xml
--src
--tst
  --test
    --SimpleJUnitTest.java

ฉันยังคัดลอก build.xml ไปยัง tst และรันจากบรรทัดคำสั่งจากไดเร็กทอรีนั้นด้วย ผลลัพธ์เดียวกัน

ฉันได้คัดลอก junit.jar ไปที่ %ant_home%\lib โดยไม่มีผลกระทบ แต่เมื่อฉันนำบรรทัด pathelement ออกจาก classpath ฉันได้รับข้อความ "The for must include junit.jar if not in Ant's own classpath" ฉันไม่แน่ใจว่าระบุ "classpath ของ Ant" ไว้ที่ใด บล็อก classpath ที่มีข้อความแสดงข้อผิดพลาดใหม่คือ:

<classpath>
  <pathelement location="c:/users/995868/apache-ant-1.9.4/lib" />
  <pathelement location="../bin" />
</classpath>

ฉันไม่ได้ใช้ฟีเจอร์ hamcrest เลย ดังนั้นฉันจึงไม่ได้ค้นหาและใส่มันลงไป ฉันกำลังพยายามสร้างตัวอย่างง่ายๆ และเอกสารประกอบสำหรับ junit ภายใต้ ant (อย่างน้อย) ไม่ได้ระบุว่าจำเป็นต้องมี hamcrest


person arcy    schedule 17.03.2015    source แหล่งที่มา
comment
ข้อมูลเพิ่มเติม: ฉันคิดว่าบางทีอาจไม่พบคลาสทดสอบเอง ฉันคัดลอก build.xml ไปยังไดเร็กทอรี bin และตรวจสอบว่าภายใต้ bin คือ test\SimpleJUnitTest.class ฉันเปลี่ยนตำแหน่ง classpath เนื่องจาก bin อยู่ในตำแหน่งอื่นที่สัมพันธ์กับ junit.jar เนื่องจากฉันไม่เห็นไดเร็กทอรี bin ใน eclipse ฉันจึงรัน ant จากบรรทัดคำสั่งโดยตั้งค่าไดเร็กทอรีการทำงานเป็น bin ผลลัพธ์เดียวกัน   -  person arcy    schedule 18.03.2015


คำตอบ (2)


ฉันคิดว่าคุณหายไป hamcrest-core.jar จาก ant classpath ของคุณ

แก้ไข: และคุณยังขาดคลาสไฟล์ทดสอบจาก classpath ของคุณด้วย ดังนั้นคุณต้องอัพเดต classpath ของคุณในลักษณะต่อไปนี้:

<classpath>
  <pathelement location="bin"/> <!--here is your test class-->
  <pathelement location="lib/hamcrest-core-1.3.jar"/> 
  <pathelement location="lib/junit-4.12.jar"/> 
</classpath>
person Sergey Pauk    schedule 17.03.2015
comment
ฉันลองสิ่งนี้แล้ว (ปรับเนื่องจากไฟล์บิลด์ของฉันอยู่ในถังขยะ) แต่ได้รับผลลัพธ์เดียวกัน ฉันได้ผลลัพธ์เดียวกันเมื่อฉันเรียกใช้ ant จากบรรทัดคำสั่ง และแม้กระทั่งหลังจากที่ฉันลบไฟล์ SimpleJUnitTest.class แล้ว ฉันคิดว่าจะต้องพบ JUnit jar เนื่องจากผลลัพธ์บ่งชี้ว่าพบงาน [junit] และงาน [echo] แต่ไม่พบไฟล์คลาสด้วยเหตุผลบางประการ - person arcy; 18.03.2015
comment
สคริปต์ด้านบนได้รับการทดสอบว่าไม่ส่งคืนความล้มเหลว ฉันเชื่อว่าคุณยังคงมีปัญหาบางอย่างกับตำแหน่งคลาสพาธของคุณ คุณสามารถจัดเตรียมโครงสร้างไดเร็กทอรีของโปรเจ็กต์ของคุณ โดยเฉพาะอย่างยิ่งตำแหน่ง Junit, hamcrest และคลาสทดสอบของคุณได้ไหม คุณสามารถให้ <classpath> บล็อกของ skript ที่อัปเดตของคุณได้หรือไม่ - person Sergey Pauk; 18.03.2015
comment
ฉันขอโทษ คุณเรียกช็อตนี้ ฉันดาวน์โหลด hamcrest-all-1.3.jar แล้ววางไว้ในช่องไลบรารีโปรเจ็กต์ และปรับตำแหน่งขององค์ประกอบเส้นทางสำหรับสิ่งนั้นและ junit.jar และข้อผิดพลาดก็หายไป อย่างไรก็ตาม ตอนนี้ข้อความ System.out.println() ไม่แสดงในคอนโซล eclipse - ควรจะเป็นเช่นนั้นหรือไม่ ข้อความเสียงสะท้อนยังคงปรากฏอยู่ที่นั่น - person arcy; 18.03.2015
comment
คุณต้องเพิ่มแอตทริบิวต์ showoutput="true" ไปที่ <junit> - person Sergey Pauk; 18.03.2015

ชั้นเรียนของคุณไม่มีกรณีทดสอบใดๆ ซึ่งเป็นข้อผิดพลาด คำอธิบายประกอบ @Test ของคุณจะถูกละเว้น เนื่องจากคุณไม่ได้ระบุ @RunWith ที่จะใช้มันจริง ดังนั้น JUnit จึงค้นหาเมธอดที่ชื่อว่า "test..."

ดังนั้นคุณจึงมีสองทางเลือก:

ก) เปลี่ยนชื่อวิธีการของคุณเป็น "testSomething" หรือคล้ายกัน

b) เพิ่ม @RunWith(BlockJUnit4ClassRunner.class) เหนือคำจำกัดความคลาสของคุณ

ทั้งสองวิธีจะทำให้แน่ใจได้ว่ามีการทดสอบอย่างน้อยหนึ่งครั้งในชั้นเรียนของคุณ ไม่ว่าจะผ่านการตั้งชื่อแบบแผน (a) หรือผ่านทางคำอธิบายประกอบ (b)

person Florian Schaetz    schedule 17.03.2015
comment
หากไม่มีการทดสอบที่ถูกต้อง ฉันคิดว่าการรันคลาสเนื่องจากการทดสอบ JUnit จะล้มเหลว แต่ (อย่างที่ฉันพูด) มันกลับไม่เป็นเช่นนั้น ฉันทำทั้งสองอย่างข้างต้น: ฉันเปลี่ยนชื่อวิธีการเป็น testDoTest() และรัน โดยได้รับข้อผิดพลาดเดียวกัน จากนั้นฉันวาง @RunWith(BlockJUnit4ClassRunner.class) ไว้เหนือบรรทัดที่เริ่มต้นคลาสสาธารณะ อนุญาตให้ eclipse ค้นหาการนำเข้าทั้งสองที่ฉันต้องการ จากนั้นรันอีกครั้งโดยได้รับข้อผิดพลาดเดียวกัน ขอขอบคุณสำหรับความพยายาม แต่คำแนะนำเหล่านี้ไม่ได้เปลี่ยนแปลงพฤติกรรมเลย - person arcy; 18.03.2015