Saya telah menemukan penggunaan yang tepat (atau setidaknya dokumentasi) JUnit sangat membingungkan. Pertanyaan ini berfungsi sebagai referensi di masa depan dan sebagai pertanyaan nyata.
Jika saya mengerti dengan benar, ada dua pendekatan utama untuk membuat dan menjalankan tes JUnit:
Approach A (JUnit 3-style): buat kelas yang memperluas TestCase, dan mulai metode pengujian dengan kata tersebut test
. Saat menjalankan kelas sebagai JUnit Test (dalam Eclipse), semua metode yang dimulai dengan kata test
dijalankan secara otomatis.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Approach B (JUnit 4-style): membuat kelas 'normal' dan menambahkan @Test
anotasi ke metode. Perhatikan bahwa Anda TIDAK harus memulai metode dengan kata test
.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Menggabungkan keduanya tampaknya bukan ide yang baik, lihat misalnya pertanyaan stackoverflow ini :
Sekarang, pertanyaan saya:
- Apa pendekatan yang disukai , atau kapan Anda akan menggunakan salah satu daripada yang lain?
- Pendekatan B memungkinkan untuk menguji pengecualian dengan memperluas anotasi @Test seperti pada
@Test(expected = ArithmeticException.class)
. Tetapi bagaimana Anda menguji pengecualian saat menggunakan pendekatan A? Saat menggunakan pendekatan A, Anda dapat mengelompokkan sejumlah kelas tes dalam suite tes seperti ini:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Tetapi ini tidak dapat digunakan dengan pendekatan B (karena setiap testclass harus mensubclass TestCase). Apa cara yang tepat untuk mengelompokkan tes untuk pendekatan B?
Sunting: Saya telah menambahkan versi JUnit ke kedua pendekatan
extends TestCase
dan kemudian setiap tes juga dijelaskan dengan@Test
hanya untuk membingungkan hal-hal. :)