我想知道如何测试MainActivity在Android中的依赖关系。这是一个简化的例子。我想用Mockito模拟MyClass
public class MainActivity extends Activity {
MyClass myClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
myClass = new MyClass();
myClass.doSomething();
}
}
我已经尝试使用静态工厂方法,我已经研究了一些其他的工厂模式。麻烦的是,MainActivity.onCreate
似乎是一个死胡同,很难注入模拟MyClass
。
是否有一种方法来模拟MyClass
与Mockito这里不使用另一个模拟或依赖注入库?我很高兴在必要时重构代码。
UPDATE我只是想我可以使用setter。这是一个合适的解决方案吗?我看到的主要问题是,它正在为不适合由其他任何东西使用的mock创建一个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;
}
}
UPDATE 2我也意识到,在不使myClass
私有,我可以使用像mMyActivity.myClass = mockMyClass
的东西。这是一个好方法吗?我认为myClass
真的应该是私人的。它还意味着让默认构造函数运行以创建myClass
,然后以通常不应该发生的方式更改其状态。
如果添加了PowerMockito,则可以使用PowerMockito.whenNew(MyClass.class)
执行此操作。但是您需要将@PrepareForTest(MainActivity.class)
添加到TestCase
看看dagger2。
从第一眼就不清楚如何使用它。但是看一下示例- https://github.com/chiuki/friendspell