gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:24:06 25 4
gpt4 key购买 nike

我想知道如何测试 Android 中 MainActivity 的依赖关系。这是一个简化的示例。我想用 Mockito 模拟 MyClass

public class MainActivity extends Activity {

MyClass myClass;

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

我尝试过使用静态工厂方法,并且研究了一些其他工厂模式。问题在于,MainActivity.onCreate 似乎是一个死胡同,很难注入(inject) MyClass 的模拟。

有没有一种方法可以在此处使用 Mockito 模拟 MyClass 而无需使用其他模拟或依赖注入(inject)库?我很高兴根据需要重组代码。

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

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设为私有(private)的情况下,我可以使用诸如mMyActivity.myClass = mockMyClass之类的东西。这是一个好方法吗?我认为 myClass 确实应该是私有(private)的。它还意味着让默认构造函数运行来创建 myClass,然后以通常不应该发生的方式更改其状态。

最佳答案

如果添加PowerMockito ,您可以使用 PowerMockito.whenNew(MyClass.class) 来完成此操作。但是您需要将 @PrepareForTest(MainActivity.class) 添加到您的 TestCase

关于java - 如何使用Mockito测试Android MainActivity onCreate中的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404656/

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