Test Suites Categories - huongpt-1499/android_testing_samplecode GitHub Wiki
Thông thường một class test sẽ sử dụng để test cho một chức năng, một unit. Nếu chúng ta có một vài test class, và mong muốn có thể kết hợp chúng thành một nhóm/ bộ kiểm tra. Chúng ta có thể làm được điều này bằng cách sử dụng Test Suite hoặc Categories Test.
Test Suite
Để sử dụng Test Suite, chúng ta sẽ đánh dấu một annotation @RunWith và @SuiteClasses ở mức class. Chẳng hạn @RunWith(Suite.class) và @SuiteClasses(TestClass1.class, …). Khi chạy lớp này, nó sẽ chạy tất cả các test method trong tất cả các test class được chỉ định.
Ví dụ :
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestFeatureLogin.class,
TestFeatureLogout.class,
TestFeatureNavigate.class,
TestFeatureUpdate.class
})
public class FeatureTestSuite {
// the class remains empty,
// used only as a holder for the above annotations
}
Categories Test
JUnit Categories cho phép nhóm các phương thức test/ class test lại với nhau để chúng ta có thể chạy chúng trong các test suite khác nhau.
Từ một nhóm các test class, Categories runner chỉ chạy các lớp và phương thức được đánh dấu với @Category và được khai báo với @IncludeCategory. Chúng ta cũng có thể loại trừ các Categories bằng cách sử dụng chú thích @ExcludeCategory.
Sự khác biệt giữa Test Suite và Categories là: Test Suite chạy tất cả các phương thức được chỉ định trong class test (ngoại trừ được chỉ định Ignore), trong khi đó Categories cho phép chúng ta có thể đánh dấu trên từng phương thức và chỉ chạy với các phương thức được đánh dấu.
Để sử dụng một Categories chúng ta sẽ thực hiện theo các bước sau:
- Marker Interface: Tạo một class/ interface để đánh dấu.
- @Category : sử dụng annotation @Category để đánh dấu phân loại, có thể đánh dấu ở mức method hoặc mức class.
- Test Suite : tạo một test suite và đánh dấu annotation @Categories.IncludeCategory để thực thi tất cả các phương thức test có category được chỉ định hoặc @Categories.ExcludeCategory để thực thi tất cả các phương thức test không có category được chỉ định.
Ví dụ :
public interface FastTests { /* category marker */ }
public interface SlowTests { /* category marker */ }
public class A {
@Test
public void a() {
fail();
}
@Category(SlowTests.class)
@Test
public void b() {
}
}
@Category({SlowTests.class, FastTests.class})
public class B {
@Test
public void c() {
}
}
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
// Will run A.b and B.c, but not A.a
}
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@ExcludeCategory(FastTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
// Will run A.b, but not A.a or B.c
}