即使黄瓜步骤失败,我怎么能运行@After?

时间:2015-09-10 19:32:15

标签: cucumber-jvm gherkin

我们有几个黄瓜步骤定义正在修改数据库,如果在测试运行后没有得到清理,那么之后会破坏测试。我们通过使用@After注释的函数来完成此操作,该注释将清理。

问题是,如果其中一个测试失败,则@After的函数不会运行,这会使数据库处于错误状态。

所以问题是,无论测试是否失败,我怎样才能确保@After的函数始终运行?

我看到了this question,但这并不是我正在尝试做的事情,答案也无济于事。

如果有帮助,这是其中一项测试的一部分。它已被大大剥离,但它有我认为的重要部分。

import static org.hamcrest.MatcherAssert.assertThat;
import cucumber.api.java.After;

public class RunMacroGMUStepDefinition
{
    @Autowired
    protected ClientSOAPRecordkeeperInterface keeper;

    @Given( "^the following Macro exists:$" )
    @Transactional
    public void establishDefaultPatron( final DataTable dataTable )
    {
        for ( final DataTableRow dataTableRow : dataTable.getGherkinRows() )
        {
            // Stuff happens here
            keeper.insert( macroScriptRecord );
        }
    }

    @After( value = "@RunMacroGMU" )
    @Transactional
    public void teardown()
    {
        for ( int i = 0; i < macroScripts.size(); i++ )
        {
            keeper.delete( macroScripts.get( i ) );
        }
    }

    // Part of @Then
    private void compareRecords( final String has, // Other stuff )
    {
        // Stuff happens here
        if ( has.equals( "include" ) )
        {
            assertThat( "No matching data found", foundMatch, equalTo( true ) );
        }
        else
        {
            assertThat( "Found matching data", foundMatch, equalTo( false ) );
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我个人使用Behat(黄瓜的PHP dist),我们使用这样的东西在测试失败后截取屏幕截图。进行了一些搜索,并在Java中找到了这个可能对这种情况有帮助的片段。

@After
public void tearDown(Scenario scenario) {
    if (scenario.isFailed()) {
    (INSERT FUNCTIONS YOU WOULD LIKE TO RUN AFTER A FAILING TEST HERE)
 }
    driver.close();
}

我希望这会有所帮助。