我们有几个黄瓜步骤定义正在修改数据库,如果在测试运行后没有得到清理,那么之后会破坏测试。我们通过使用@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 ) );
}
}
}
答案 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();
}
我希望这会有所帮助。