gpt4 book ai didi

android - initMocks 上的 Mockito AbstractMethodError

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:34:00 24 4
gpt4 key购买 nike

所以我一整天都在努力让 Mockito 为我的 Android 项目工作。我将所有内容添加到我的 Gradle 构建文件中:

androidTestCompile 'org.mockito:mockito-core:2.0.29-beta'
androidTestCompile "junit:junit:4.12-beta-3"
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'

并尝试运行一个实际上没有做任何事情的测试:

@RunWith(MockitoJUnitRunner.class)
public class LoginActivityTest extends
ActivityInstrumentationTestCase2<LoginActivity> {

private LoginActivity loginActivity;

private EditText et_email;
private EditText et_password;
private Button btn_login;

@Mock
SpiceManager manager;

public LoginActivityTest(){
super(LoginActivity.class);
}

@Override
public void setUp() throws Exception {
super.setUp();
loginActivity = getActivity();

MockitoAnnotations.initMocks(this);
//manager = mock(SpiceManager.class);
loginActivity.spiceManager = manager;

et_email = (EditText) loginActivity.findViewById(R.id.et_email);
et_password = (EditText) loginActivity.findViewById(R.id.et_password);
btn_login = (Button) loginActivity.findViewById(R.id.btn_login);
}

@Override
public void tearDown() throws Exception {
super.tearDown();
}

public void testLoginEmpty() throws Exception {
verify(manager).execute(
any(LoginRequest.class),
anyString(),
anyLong(),
any(LoginActivity.LoginRequestListener.class));
}
}

我想模拟该服务的原因是因为我想将网络部分排除在测试之外。不需要实际发送网络请求进行简单测试,对吧?

无论如何,该应用程序已构建,但当实际测试开始运行时,它失败(或者更确切地说是崩溃)并出现 AbstractMethodError:

Running tests
Test running started
java.lang.AbstractMethodError: abstract method
"org.mockito.plugins.MockMaker$TypeMockability
org.mockito.plugins.MockMaker.isTypeMockable(java.lang.Class)"

at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:167)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:58)
at org.mockito.Mockito.mock(Mockito.java:1410)
at org.mockito.Mockito.mock(Mockito.java:1288)
at be.sanmax.membr.activities.LoginActivityTest.setUp(LoginActivityTest.java:50)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)

这让我觉得很奇怪,因为 SpiceManager 类不包含任何抽象 方法。然而,它是我没有编写的某些包的一部分 (com.octo.android.robospice)。但这应该不是问题。应该吗?

如果这是问题所在,我该如何将其从任何测试中排除?我只想测试应用程序的工作情况,而不是网络连接...

最佳答案

Dexmaker 支持 Mockito 2.0,因为 MockMaker 的定义已经改变。我建议你使用 Mockito 1.10.19 但你会遇到 this NPE为此,我提交了 fix .

从 1.5 版开始,我的修复似乎已合并到 dexmaker

关于android - initMocks 上的 Mockito AbstractMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31409458/

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