我想在Android应用程序中为静态方法编写一个单元测试。我使用Mockito和PowerMock来实现这一点。
在Android文件夹test(myproject/app/src/test/java/com/myproject/Android/)中,我有一个单元测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(StringUtil.class)
public class StringUtilTest {
@Test
public void isCorrectEmailStub() {
mockStatic(StringUtil.class);
String INCORRECT_EMAIL_TO_CHECK = "incorrect_email_some.com";
when(StringUtil.isCorrectEmail(INCORRECT_EMAIL_TO_CHECK)).thenReturn(true);
assertThat(StringUtil.isCorrectEmail(INCORRECT_EMAIL_TO_CHECK), is(true));
}
}
这是我的构建。格雷德尔:
android {
defaultConfig {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
dependencies {
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito:1.6.6'
testCompile 'org.powermock:powermock-module-junit4:1.6.6'
testCompile "org.mockito:mockito-core:2.7.22"
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile "org.mockito:mockito-android:2.7.21"
}
该项目成功构建,但当我尝试运行测试iscorrectmailstub时,出现了以下错误:
异常在线程"main"actory.java:35NoClassDefFoundError: org/mockito/异常/记者在org.powermock.modules.junit4.common.internal.impl.GeneratedSerializationConstructorAmpl.get实例(未知来源)在mpl.java:140Corg.powermock.modules.junit4.common.internal.impl.实例(Cmpl.run)在mpl.java:119SunReflteFactoryIorg.powermock.modules.junit4.common.internal.impl.实例(SunReflteFactoryInstantiator.java:48)在org.powermock.reflect.internal.WhiteboxImpl.new实例(WhiteboxImpl.java:251)在org.powermock.reflect.Whitebox.new实例(Whitebox.java:139)在org.powermock.api.extension.reporter.AbstractMockingFrameworkReporterFactory.getInstanceForClassLoader(AbstractMockingFrameworkReporterFactory.java:41)在org.powermock.api.extension.reporter.AbstractMockingFrameworkReporterFactory.create(AbstractMockingFrameworkReporterFjava.lang.)在sun.reflect.JUnit4TestSuiteChankerIccessor5.newMockingFrameworkReporterFjava.lang.reflect.)在onstructor.newJUnit4TestSuiteChankerIonstructor.java:423(JUnit4TestSuiteChankerIorg.objenesis.instantiator.sun.)在nstantiator.newAppMain. main(AppMain. java: 147)由以下原因引起:java. lang。ClassNotFoundException:org. mockito.异常。java. net的记者。URLClassLoader. findClass(URLClassLoader. java: 381)在java. lang。ClassLoader. loadClass(ClassLoader. java: 424)在sun. misc. Launcher$AppClassLoader. loadClass(Launcher. java: 331)在java. lang。ClassLoader. loadClass(ClassLoader. java: 357)在org. powermock. core. class loader。MockClassLoader. loadModifiedClass(MockClassLoader. java: 190)在org. powermock. core. class loader。DeferSupport portingClassLoader. loadClass1(DeferSupport portingClassLoader. java: 77)在
为什么我会出现这个错误,我该如何防止它?
仅适用于Mockito版本
testCompile 'org.powermock:powermock-api-mockito:1.6.6'
testCompile 'org.powermock:powermock-module-junit4:1.6.6'
testCompile "org.mockito:mockito-core:1.10.19"
我应该如何测试异常?我可以mock connector并且我可以赋予它抛出异常的行为,但是我不明白下一步该怎么做。
我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?
尝试让JUnit与mockito测试一起工作,并在我的测试中获得NPE。我想验证一下,当调用时,紧接着调用了方法。我觉得奇怪的一个问题是,在Mockito上。验证(registrationServiceImpl,Mockito.times(1))。创建注册人(registrationDTO) 方法?IntelliJ只建议界面中的方法? 我的测试代码如下: 下面是我正在测试的代码:
我从Mockito开始进行Android无头单元测试。我想测试的部分在后端,它依赖于。我尝试模仿,但在运行测试时得到null。 本例中的模拟并没有显示它是如何模拟的:https://developer.android.com/training/testing/unit-testing/local-unit-tests.html#setup 上面的链接(https://github.com/goog
问题内容: 我有一个带有返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? 问题答案: 括号放置不正确。 您需要使用: 而 不是 使用: 在文档中对此进行了解释
我试图测试一个if条件,使用时(),然后返回(),但是当我运行我的测试用例时,它会给我丢失的方法调用,即使我已经嘲笑了实现该方法的类。 这就是我想嘲笑的如果条件 这就是我检查if条件的方式 我已经用@Mock annotation模拟了“request”,但仍然得到下面的异常。 我不确定我做错了什么。有人能帮忙吗?