小编Avt*_*ohi的帖子

robolectric - 如何在创建 Activity 对象时模拟和注入业务类

我的任务是为现有的 Android 活动编写单元测试,并且编写的代码不是为了符合单元测试(紧耦合)。

场景:我有一个类 StroageManager,它在 MyActivity onCreate 方法中被实例化。

@Override
protected void onCreate(Bundle savedInstanceState) 
{            
 StorageManager storagemanager = GetStorageManager(); // return new object of stroage manager
 super.onCreate(savedInstanceState);.....
    ...
}
Run Code Online (Sandbox Code Playgroud)

为了通过 Robolectric 创建活动实例,我需要在设置 MyActivity 之前在我的测试中模拟它。

问题:如何在通过 robolectric 创建 myActivity 对象时模拟和注入此模拟对象

注意:这是现有的 Activity,我没有太多的自由来修改 Activity 代码以进行大范围扩展。此外,我们正在使用 Mockito 框架进行模拟,因此如果您提供使用 Mockito 的示例,那就太好了。

这是我的示例代码,我尝试将 Robolectric 与 Mockito 结合使用,但无法正常工作:

@RunWith(RobolectricTestRunner.class)
public class myActivityTest {

    @Mock
    private StorageManager storageManager;

    @InjectMocks
    MyActivity myActivity;

    @Before
    public void setUp() {
        ActivityController<MyActivity> activityController = Robolectric.buildActivity(MyActivity.class);
        myActivity = activityController.get();
       // when(registrationActivity.GetMetricManager()).thenReturn(mock(MetricsManager));
        initMocks(this); …
Run Code Online (Sandbox Code Playgroud)

android unit-testing mockito robolectric android-testing

5
推荐指数
1
解决办法
2063
查看次数