我想知道如何在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
,然后以通常不会发生的方式更改其状态。
答案 0 :(得分:1)
如果您添加PowerMockito,则可以使用PowerMockito.whenNew(MyClass.class)
执行此操作。但您需要将@PrepareForTest(MainActivity.class)
添加到TestCase
答案 1 :(得分:1)
看看Dagger 2。
从第一眼看,目前尚不清楚如何使用它。但请看一下示例 - https://github.com/chiuki/friendspell