условный демонтаж - PullRequest
       7

условный демонтаж

3 голосов
/ 14 ноября 2011

Я хочу иметь условный разрыв в моих тестовых случаях junit, что-то вроде

@Test
testmethod1()
{
//condition to be tested
}
@Teardown
{
//teardown method here
}

в разрыве, я хочу иметь условие типа

if(pass) 
then execute teardown 
else skip teardown

, возможен ли такой сценарийиспользуя джунит?

1 Ответ

7 голосов
/ 14 ноября 2011

Вы можете сделать это с помощью TestRule .TestRule позволяет выполнять код до и после метода тестирования.Если тест выдает исключение (или AssertionError для несостоявшегося утверждения), то тест не пройден, и вы можете пропустить tearDown ().Примером может быть:

public class ExpectedFailureTest {
    public class ConditionalTeardown implements TestRule {
        public Statement apply(Statement base, Description description) {
            return statement(base, description);
        }

        private Statement statement(final Statement base, final Description description) {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
                    try {
                        base.evaluate();
                        tearDown();
                    } catch (Throwable e) {
                        // no teardown
                        throw e;
                    }
                }
            };
        }
    }

    @Rule
    public ConditionalTeardown conditionalTeardown = new ConditionalTeardown();

    @Test
    public void test1() {
        // teardown will get called here
    }

    @Test
    public void test2() {
        Object o = null;
        o.equals("foo");
        // teardown won't get called here
    }

    public void tearDown() {
        System.out.println("tearDown");
    }
}

Обратите внимание, что вы вызываете tearDown вручную, поэтому вы не хотите иметь аннотацию @After для метода, в противном случае он вызывается дважды.Дополнительные примеры можно найти в ExternalResource.java и ExpectedException.java .

...