如何使用Mockito测试Android的MainActivity onCreate中的依赖项

时间:2015-09-04 18:42:26

标签: java android unit-testing mockito

我想知道如何在Android中的MainActivity中测试依赖项。这是一个简化的例子。我想和Mockito一起模仿MyClass

public class MainActivity extends Activity {

    MyClass myClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        myClass = new MyClass();
        myClass.doSomething();
    }
}

我尝试过使用静态工厂方法,我已经研究了其他一些工厂模式。麻烦的是MainActivity.onCreate似乎是一个死胡同,很难注入MyClass的模拟。

有没有办法在没有使用其他模拟或依赖注入库的情况下在这里使用Mockito模拟MyClass?我很乐意根据需要重新构建代码。

更新我只是觉得我可以使用setter。这是一个合适的解决方案吗?我看到的主要问题是它正在创建一个纯粹用于模拟的setter,不适合被其他任何东西使用。至少,它可以是包私有来限制访问。

public class MainActivity extends Activity {

    MyClass myClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setMyClass(new MyClass());
        myClass.doSomething();
    }

    void setMyClass(MyClass myClass) {
        this.myClass = myClass;
    }
}

更新2 我也意识到,如果不将myClass设为私有,我可以使用mMyActivity.myClass = mockMyClass之类的内容。这是一个很好的方法吗?我认为myClass确实应该是私人的。它还意味着让默认构造函数运行以创建myClass,然后以通常不会发生的方式更改其状态。

2 个答案:

答案 0 :(得分:1)

如果您添加PowerMockito,则可以使用PowerMockito.whenNew(MyClass.class)执行此操作。但您需要将@PrepareForTest(MainActivity.class)添加到TestCase

答案 1 :(得分:1)

看看Dagger 2

从第一眼看,目前尚不清楚如何使用它。但请看一下示例 - https://github.com/chiuki/friendspell