gpt4 book ai didi

java - 在 Robolectric 测试中注入(inject)模拟

转载 作者:太空狗 更新时间:2023-10-29 13:06:47 25 4
gpt4 key购买 nike

我必须为具有私有(private)字段(演示者)的特定 Activity 构建 Robolectric 测试。为了将模拟注入(inject)该字段,我使用了反射,因为我正在处理的项目没有依赖注入(inject)框架。

我的测试设置如下:

MyActivityTest.java

public class ConsumoViewTest {

@Mock
MvpConsumo.Presenter mockPresenter;

private MyActivity view;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
ActivityController<MyActivity> activityController =
Robolectric.buildActivity(MyActivity.class);
view = activityController.get();
try {
FieldUtils.writeField(view, "presenter", mockPresenter, true);
} catch (IllegalAccessException e){
//Exception handling
}
activityController.setup();
}

作为我的 Activity 设置的一部分,它创建并添加了一个 Fragment 并在 OnAttach() 期间创建了 Fragment 为演示者调用 getter。现在,我无法理解的是 Activity 返回一个真正的演示者而不是我注入(inject)的模拟。这个真实的演示者最终调用了我的真实模型和我的真实网络服务,这显然不适合测试。

现在有人知道为什么我的模拟在这种情况下被忽略了吗?

最佳答案

在写完问题后,我意识到了问题所在。我的反射确实有效,演示者被初始化为 Mock,但我忘记了在 Activity.OnCreate() 期间,演示者被初始化为真正的演示者,从而覆盖了我之前注入(inject)的 Mock。

关于java - 在 Robolectric 测试中注入(inject)模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935779/

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