Поиск…


замечания

Есть льготы для обоих. Расширение ExternalResource это удобно, особенно если нам требуется только before() чтобы установить что-то.

Тем не менее, мы должны знать, что, поскольку метод before() выполняется за пределами try...finally , любой код, который требуется очистить after() , не будет выполнен, если есть ошибка во время выполнение before() .

Вот как он выглядит внутри ExternalResource :

before();
try {
    base.evaluate();
} finally {
    after();
}

Очевидно, что если какое-либо исключение выбрано в самом тесте или другом вложенном правиле, то после этого все равно будет выполнено.

Пользовательский @TestRule по реализации

Это особенно полезно, если у нас есть класс, который мы хотим расширить в правиле. См. Пример ниже для более удобного метода.

import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;

public class AwesomeTestRule implements TextRule {
    
    @Override
    public Statement apply(Statement base, Description description) {
        return new AwesomeStatement(base);
    }

    private static class AwesomeStatement extends Statement {
        
        private Statement base;
        
        public AwesomeStatement(Statement base) {
            this.base = base;
        }

        @Override
        public void evaluate() throws Throwable {
            try {
                // do your magic
                base.evaluate(); // this will call Junit to run an individual test
            } finally {
                // undo the magic, if required
            }
        }
    }
    
}

Пользовательский @TestRule по расширению

JUnit имеет абстрактную реализацию @TestRule которая позволяет вам писать правило более простым способом. Это называется ExternalResource и предоставляет два защищенных метода, которые могут быть расширены следующим образом:

public class AwesomeTestRule extends ExternalResource {

    @Override
    protected void before() {
        // do your magic
    }

    @Override
    protected void after() {
        // undo your magic, if needed
    }

}



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow