0

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 Answer 1

2

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
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.