使用 Espresso 的 IdlingResource 可以实现网络延迟逻辑,以确保在网络请求完成之前,Espresso 将等待。

首先,创建一个实现 IdlingResource 接口的类,例如 NetworkDelayIdlingResource:

public class NetworkDelayIdlingResource implements IdlingResource {
    private final long delayMillis;
    private final Handler handler;
    private ResourceCallback resourceCallback;

    public NetworkDelayIdlingResource(long delayMillis) {
        this.delayMillis = delayMillis;
        this.handler = new Handler();
    }

    @Override
    public String getName() {
        return NetworkDelayIdlingResource.class.getName();
    }

    @Override
    public boolean isIdleNow() {
        return resourceCallback != null;
    }

    @Override
    public void registerIdleTransitionCallback(ResourceCallback callback) {
        this.resourceCallback = callback;
    }

    public void doDelay() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (resourceCallback != null) {
                    resourceCallback.onTransitionToIdle();
                }
            }
        }, delayMillis);
    }
}

然后,在你的测试类中,使用 NetworkDelayIdlingResource 来实现网络延迟逻辑:

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    private static final long NETWORK_DELAY_MILLIS = 2000; // 2 seconds

    @Rule
    public ActivityTestRule<MainActivity> activityRule =
            new ActivityTestRule<>(MainActivity.class);

    private NetworkDelayIdlingResource idlingResource;

    @Before
    public void setUp() {
        idlingResource = new NetworkDelayIdlingResource(NETWORK_DELAY_MILLIS);
        Espresso.registerIdlingResources(idlingResource);
    }

    @After
    public void tearDown() {
        Espresso.unregisterIdlingResources(idlingResource);
    }

    @Test
    public void testNetworkDelay() {
        // Perform network request

        // Simulate network delay
        idlingResource.doDelay();

        // Perform assertions
    }
}

在上述示例中,我们在 setUp() 方法中创建了 NetworkDelayIdlingResource,并在 @Before 注解中注册了该资源。然后,在 @Test 注解的测试方法中,我们可以调用 idlingResource.doDelay() 方法来模拟网络延时。

这样,当测试方法执行时,Espresso 会等待网络延时结束后再继续执行后续的操作。


原文地址: https://www.cveoy.top/t/topic/pLsq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录