gpt4 book ai didi

android - Robolectric buildActivity() 与 Mockito spy ?

转载 作者:可可西里 更新时间:2023-11-01 18:48:01 25 4
gpt4 key购买 nike

在我看来,使用 Robolectric 的生命周期实用程序(从 Robolectric.buildActivity() 开始)构建 Activity 单元测试和使用 Mockito spy 监视同一个 Activity 是相互排斥的。

因为 buildActivity() 控制着 Activity 对象的构造,所以为 Activity 添加 spy 的唯一地方是在调用 buildActivity() 之后。但是, spy 在事后添加时无法正常运行。

在监视 ActivityController 生命周期方法(例如 create()start())的副作用时尤其如此恢复()。我假设这是因为 ActivityController 持有对“真实”Activity 对象的引用,而不是后来添加的 spy 。

那么有什么方法可以侦测正在使用 Robolectric 进行单元测试的 Activity,以便侦测器在通过 Robolectric 的 ActivityController 调用生命周期方法时正常工作?

最佳答案

答案是使用反射来替换 ActivityController 中“真正的”Activity 对象。

@Test
public void someTestMethod() throws NoSuchFieldException, IllegalAccessException {
ActivityController<LoginActivity> ac = Robolectric.buildActivity(LoginActivity.class);
LoginActivity spiedActivity = spy(ac.get());

replaceComponentInActivityController(ac, spiedActivity);

ac.create();

// do your work
}

public static void replaceComponentInActivityController(ActivityController<?> activityController, Activity activity)
throws NoSuchFieldException, IllegalAccessException {
Field componentField = ComponentController.class.getDeclaredField("component");
componentField.setAccessible(true);
componentField.set(activityController, activity);
}

我用Robolectric 3.1测试,没问题。

关于android - Robolectric buildActivity() 与 Mockito spy ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com