如何针对特定的JUnit测试用例执行@After?

时间:2017-11-08 08:16:20

标签: android unit-testing junit automated-tests android-espresso

我正在使用Espresso来构建UI测试。对于某些测试用例,我想在脚本失败的情况下调用特定的后续步骤来重置状态。

有没有办法为单个JUnit测试用例(<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="dext1"> <label> Extra Vas 1:</label> <select name="ext1" id="ext1" ng-model="FormData.Phases"> <option name="vas" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas" value="1"> VAS 1 </option> <option name="vas" value="2"> VAS 2 </option> <option name="vas" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext2"> <label> Extra Vas 2:</label> <select name="ext2" id="ext2" ng-model="FormData.Phases"> <option name="vas2" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas2" value="1"> VAS 1 </option> <option name="vas2" value="2"> VAS 2 </option> <option name="vas2" value="3"> VAS 3 </option> </select> </div> <br/> <div id="dext3"> <label> Extra Vas 3:</label> <select name="ext3" id="ext3" ng-model="FormData.Phases"> <option name="vas3" selected value="0"> -- NO EXTRA VAS -- </option> <option name="vas3" value="1"> VAS 1 </option> <option name="vas3" value="2"> VAS 2 </option> <option name="vas3" value="3"> VAS 3 </option> </select> </div>)执行@After步骤? 我能想到的唯一解决方案是创建一个单独的测试类。但我希望将测试用例分组到同一个测试类中。

1 个答案:

答案 0 :(得分:2)

听起来有点奇怪;)但是......

  • 您可以在单个测试中添加try / finally到之后的行为。例如:

    @Test
    public void testA() {
        try {
            // the body of testA
        } finally {
            // apply the 'after' behaviour for testA 
        }
    }
    
  • 或者,如果您真的想使用JUnit的@After,那么您可以使用TestName Rule(自JUnit 4.7起),如下所示:

    @Rule
    public TestName testName = new TestName();
    
    @After
    public void conditionalAfter() {
        if ("testB".equals(testName.getMethodName())) {
            System.out.println("apply the 'after' behaviour for testB");
        }
    }
    
    @Test
    public void testA() {
    
    }
    
    @Test
    public void testB() {
    
    }