Аннотация @ClassRule применяется для для всего класса, т.е. как @BeforeClass и @AfterClass(выполняются один раз, т.е. до всех тестов, и после всех тестов)
Пример:

import org.junit.rules.TestWatcher;
import org.junit.runner.Description;

public class MyRule extends TestWatcher {	
	@Override
    public void starting(Description description) {
        System.out.println("----starting----");
    }

    @Override
    public void finished(Description description) {
    	 System.out.println("----finished----");
    }
    
}

Теперь пример использования аннотации @ClassRule

import static org.junit.Assert.*;

import org.junit.rules.TestName;

public class TestRule {

    @Rule
    public TestName name = new TestName();
 
    @ClassRule
    public static MyRule myRule = new MyRule();
 
    @Test
    public void test1() throws Exception {
        System.out.println(name.getMethodName());
    }
 
    @Test
    public void test2() throws Exception {
        System.out.println(name.getMethodName());
        assertEquals(1 + 2, 4);
    }
 
    @Test
    public void test3() throws Exception {
        System.out.println(name.getMethodName());
    }
 
}

Важно ! Аннотация @ClassRule должна быть помечена как static
Вывод на консоль:
—-starting—-
test1
test2
test3
—-finished—-

т.е. у нас получились аналогично вызовам аннотаций @BeforeClass и @AfterClass
Значит данные аннотации больше не нужны

Реклама