Filtering Android Connected Tests

109 views Asked by At

I have a few "connected" tests that are only relevant to run on a specific device model or on a specific brand and should be skipped on other brands/models.

I may be missing something, but this kind of filtering seems not possible out-of-the-box with AndroidJUnitRunner (by using annotation and/or passing appropriate arguments to it).

So, I was thinking to extend the AndroidX test framework to support this kind of filtering. In the end, I would like to be able to filter test with something like this

@TargetDeviceFilter(brand="SAMSUNG",model="XCover3")
@Test
public void myTestToRunOnSamsungXCover3DeviceOnly(){
    ...
}

My question: is there any way to accomplish this kind of filtering without extending AndroidX test framework? And if writing my own AndroidJUnitRunner and/or my own annotations is required, how should I start ?

I found a few interesting base classes that I may need to extend like :

androidx.test.internal.runner.TestRequestBuilder androidx.test.internal.runner.TestRequestBuilder.DeviceBuild

but as those classes are in a "internal" package: attempting to extend them is probably not a good idea?

Any advice on how to deal with that problem is welcome.

1

There are 1 answers

0
ocos On

I think, you may use org.junit.Assume. Create a helper class DeviceHelper to detect mobile device informations for convenience. Your test logic will be executed only if the assumption is correct.

@Test
public void myTestToRunOnSamsungXCover3DeviceOnly() {
        // adapt this part to your business need
        org.junit.Assume.assumeTrue(
            DeviceHelper.isBrand("SAMSUNG") && 
            DeviceHelper.isModel("XCover3")
        );

        // i.e. you can filter whatever you want test's according to device sdk_int
        assumeTrue(SomeHelper.getDeviceSdk() >= 21);

        // your test code
}