Masalah Menjalankan Tes JUnit sederhana melalui Ant di gerhana

Saya memiliki tes JUnit berikut di Eclipse:

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

Dan build.xml berikut di folder yang sama:

<?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>

Jika saya menjalankan kelas pengujian di bawah "Jalankan Sebagai..." dan memilih JUnit, kelas tersebut berjalan tanpa kesalahan. Jika saya menjalankan build.xml di bawah "Run As..." dan memilih Ant Build, saya mendapatkan output berikut:

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

Jika saya menghapus atribut classpath di bawah JUnit, saya mendapatkan pesan kesalahan berbeda tentang perlunya toples junit di classpath, jadi menurut saya JUnit dipanggil. Saya hanya tidak mengerti apa kesalahannya di sini. Saya sudah mencoba memasukkan kode blok statis di kelas untuk melakukan System.out.println() ketika kelas dimuat, dan itu tidak muncul, jadi sepertinya ada kesalahan yang saya lakukan dalam konfigurasi.

Bisakah seseorang tolong beri tahu saya apa yang salah di sini?

Sunting:

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

Saya juga menyalin build.xml ke tst dan menjalankannya dari baris perintah dari direktori itu, hasil yang sama.

Saya telah menyalin junit.jar ke %ant_home%\lib tanpa efek apa pun, meskipun ketika saya mengeluarkan baris pathelement dari classpath saya mendapat pesan "For must include junit.jar if not in Ant's own classpath". Saya tidak yakin di mana "jalur kelas Ant sendiri" ditentukan. Blok classpath dengan pesan kesalahan baru adalah ini:

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

Saya tidak menggunakan fitur hamcrest di mana pun, jadi saya belum mencarinya dan memasangnya. Saya mencoba membuat contoh sederhana, dan dokumentasi untuk junit di bawah ant (setidaknya) tidak menyebutkan bahwa hamcrest diperlukan.


person arcy    schedule 17.03.2015    source sumber
comment
Info lebih lanjut: Saya pikir mungkin kelas tes itu sendiri tidak dapat ditemukan; Saya menyalin build.xml ke direktori bin, dan memverifikasi bahwa di bawah bin ada test\SimpleJUnitTest.class. Saya mengubah lokasi classpath karena bin berada di lokasi yang berbeda dibandingkan dengan junit.jar. Karena saya tidak dapat melihat direktori bin di gerhana, saya hanya menjalankan ant dari baris perintah dengan direktori kerja disetel ke bin. Hasil yang sama.   -  person arcy    schedule 18.03.2015


Jawaban (2)


Saya kira Anda kehilangan hamcrest-core.jar dari jalur kelas semut Anda.

EDIT: dan Anda juga kehilangan kelas file pengujian itu sendiri dari classpath Anda. Jadi, Anda perlu memperbarui classpath Anda dengan cara berikut:

<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
Saya mencoba ini (disesuaikan dengan fakta bahwa file build saya ada di bin), tetapi saya mendapatkan hasil yang sama. Saya mendapatkan hasil yang sama ketika saya menjalankan ant dari baris perintah, dan bahkan setelah saya menghapus file SimpleJUnitTest.class. Menurut saya toples JUnit harus ditemukan, karena outputnya menunjukkan bahwa ia menemukan tugas [junit] dan tugas [echo]. Tetapi file kelas tidak ditemukan karena alasan tertentu. - person arcy; 18.03.2015
comment
Script di atas telah diuji dan tidak menghasilkan kegagalan. Saya yakin Anda masih mengalami beberapa masalah dengan lokasi classpath Anda. Bisakah Anda memberikan struktur direktori proyek Anda, khususnya di mana junit, hamcrest, dan kelas pengujian Anda? Bisakah Anda juga memberikan <classpath> blok skript Anda yang telah diperbarui? - person Sergey Pauk; 18.03.2015
comment
Saya minta maaf, Anda mengambil keputusan -- Saya mengunduh hamcrest-all-1.3.jar dan meletakkannya di slot perpustakaan proyek, dan menyesuaikan lokasi elemen jalur untuk itu dan junit.jar, dan kesalahannya hilang. Namun sekarang, teks System.out.println() tidak muncul di konsol Eclipse -- bukan? Teks gema masih muncul di sana. - person arcy; 18.03.2015
comment
Anda harus menambahkan atribut showoutput="true" ke <junit> - person Sergey Pauk; 18.03.2015

Kelas Anda tidak berisi kasus uji apa pun, yang merupakan kesalahan. Anotasi @Test Anda akan diabaikan, karena Anda belum menentukan @RunWith yang benar-benar akan menggunakannya, jadi JUnit mencari metode bernama "test...".

Jadi, Anda punya dua pilihan:

a) Ganti nama metode Anda menjadi "testSomething" atau serupa.

b) Tambahkan @RunWith(BlockJUnit4ClassRunner.class) di atas definisi kelas Anda

Kedua cara tersebut akan memastikan bahwa setidaknya ada satu pengujian di kelas Anda, baik melalui konvensi penamaan (a) atau melalui penjelasan (b).

person Florian Schaetz    schedule 17.03.2015
comment
Jika tidak ada tes yang valid, saya pikir menjalankan kelas sebagai tes JUnit akan gagal, tetapi (seperti yang saya katakan) ternyata tidak. Saya melakukan kedua hal di atas: Saya mengganti nama metode menjadi testDoTest() dan menjalankannya, mendapatkan kesalahan yang sama; lalu saya meletakkan @RunWith(BlockJUnit4ClassRunner.class) di atas baris awal kelas publik, mengizinkan Eclipse menemukan dua impor yang saya perlukan, dan menjalankannya lagi, mendapatkan kesalahan yang sama. Terima kasih atas upayanya, namun tidak satu pun dari saran ini yang mengubah perilaku. - person arcy; 18.03.2015