2017-07-06 110 views
0

我有一个Android仪器测试,用于测试我的ServerApi和多个其他测试设备,我的活动。仪器测试:将测试定义为以下强制测试

ServerApi测试可能失败的原因之一是(可惜)是一个坏的无线网络。在这种情况下,我的整个测试套件需要很长时间才能完成,因为处理网络访问的所有活动都必须在发生故障之前超时。

如何定义ServerApiTest在一开始运行,如果失败,取消所有其他测试?

public class ServerApiTest extends ApplicationTestCase<Application> { 
    //... 

    public ServerApiTest() { 
     super(Application.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
     Log.i(TAG, SERVER_KEYWORD + ": prepare"); 
     super.setUp(); 
     _context = getContext(); 
    } 

    @Override 
    public void tearDown() throws Exception { 
     Log.i(TAG, SERVER_KEYWORD + ": cleanUp"); 
     super.tearDown(); 
    } 

    public void testPing() throws InterruptedException, ExecutionException, 
            URISyntaxException { 
     //... 
    } 

作为一个例子的活性试验中的一个的摘录:

@RunWith(AndroidJUnit4.class) 
@MediumTest 
public class RecordingActivityTest { 
    private static final String TAG = RecordingActivityTest.class.getSimpleName(); 

    @Rule 
    public ActivityTestRule<RecordingActivity> _activityRule 
     = new ActivityTestRule<>(RecordingActivity.class); 


    @Test 
    public void testOnCreate() { 
     onView(withId(R.id.lytRecordingButtons)).check(
       matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))); 
    } 
    //... 

有趣的是,我在测试报告人已经观察到,在某些(稀有和尚待说明)的场合,如果一些测试失败,测试套件确实似乎中止。

查看屏幕截图:RecordingActivityTest失败,测试次数报告为25.但在测试中没有任何更改(只修复导致RecordingActivityTest失败的错误),下一个版本再次正确显示所有43个测试 - 巧合的是现在由于WiFi损坏而导致测试失败。

首次试运行不指望所有的测试: First test run which does not count all tests 下面的测试运行,再次显示了所有测试: Following test run which shows all tests again

无论引起了不被执行的测试,我可以利用这一机制为了我想要达到的目标?

回答

1

如果运行测试需要稳定的Wifi,并且您希望跳过运行它们,您可以实现自定义TestRule,在该规则中的自定义语句中执行Wifi检查。在该声明的评估方法中,您随后致电Assume.assumeTrue("Skip test due to poor Wifi connection", methodThatReturnsTrueIfWifiIsUp())。然后,您可以将此规则添加到需要Wifi的每个测试类中,并且如果网络查找需要很长时间才能完成,并且您不希望为每个测试类执行此操作,则可能会存储静态连接状态。

+0

这样可能会好,但测试报告很难理解,因为很多测试都失败了,而且我们必须推断这些都是基于相同的原因(通过深入研究报告)。如果只有一个测试会失败并停止执行以下操作,这将立即清除 – PhilLab

+0

@PhilLab在这种情况下可能会有所帮助https://stackoverflow.com/questions/10036894/stopping-junit-suite-if-particular - 试验 - 失败。 – fejd