Articles of powermock

如何让Powermock与Dexmaker合作

我正在尝试使用以下build.gradleconfiguration将Powermock作为我的Androidtesting的依赖项: dependencies{ compile 'com.android.support:appcompat-v7:21.0.+' androidTestCompile('org.mockito:mockito-core:1.9.5') androidTestCompile('com.google.dexmaker:dexmaker:1.2') androidTestCompile('com.google.dexmaker:dexmaker-mockito:1.2') androidTestCompile('org.powermock:powermock-module-junit4:1.5.5') { exclude module: 'junit' } androidTestCompile('org.powermock:powermock-api-mockito:1.5.5') { exclude module: 'mockito-all' } } 然而,编译器抱怨说 Error:Gradle: Execution failed for task ':app:packageDebugTest'. > Duplicate files copied in APK mockito-extensions/org.mockito.plugins.MockMaker File 1: ~/.gradle/caches/modules-2/files-2.1/com.google.dexmaker/dexmaker-mockito/1.2/b99884a4c6ef6335ba376f79aa79632b2421c17c/dexmaker-mockito-1.2.jar File 2: ~/.gradle/caches/modules-2/files-2.1/com.google.dexmaker/dexmaker-mockito/1.2/b99884a4c6ef6335ba376f79aa79632b2421c17c/dexmaker-mockito-1.2.jar 看着jar结构,我注意到Dexmaker和Powermock MockMaker在mockito-extensions声明了MockMaker 什么是MockMaker? 他们有什么不同? 而最重要的问题是:是否有可能使Powermock与Dexmaker很好地协作? 提前致谢。 任何帮助将不胜感激。

如何安卓unit testing和模拟静态方法

嗨,我真的希望你能帮助我,我觉得我已经把我的头发拉了几天。 我试图写一个方法的unit testingA.方法A调用一个静态方法B.我想嘲笑静态方法B. 我知道这已经被问到了,但是我觉得Android已经成熟了,而且必须有一种方法来做这样一个简单的任务,而不用重写我想testing的方法。 这里是一个例子,首先我要testing的方法: public String getUserName(Context context, HelperUtils helper) { if(helper == null){ helper = new HelperUtils(); } int currentUserId = helper.fetchUsernameFromInternet(context); if (currentUserId == 1) { return "Bob"; } else { return "Unknown"; } } 接下来是我想要模拟的静态方法: public class HelperUtils { public static int fetchUsernameFromInternet(Context context) { int userid = 0; Log.i("HelperUtils ", […]

尝试使用PowerMockito存根android Activity类抛出RuntimeException“Stub!”

我发现这个例子 ,他们使用PowerMock和EasyMock存根/模拟android的Menu和MenuItem类。 我一直在尝试用PowerMock和Mockito做类似Activity的事情。 我知道很多方法是最终的,在Android.jar中,它们都抛出了RuntimeException(“Stub!”)。 我也明白,这个testing是不完整的,但我只是想看看是否有可能嘲笑android活动类。 但是,鉴于PowerMock允许你用最终方法来模拟类,不应该这个代码工作? @RunWith(PowerMockRunner.class) @PrepareForTest(Activity.class) public class MyTestCase extends TestCase { public void testPlease_JustWork() throws Exception { Activity mockActivity = PowerMockito.mock(Activity.class); PowerMockito.when(mockActivity.getTitle()).thenReturn("Title"); } } 我会认为,RuntimeException不会再发生,“标题”将被返回,但它仍然会引发exception。 我尝试了各种不同的东西,比如doReturn("Title").when(mockActivity).getTitle(); 并suppress(constructor(Activity.class)); 我做错了什么,或者这是不可能的?

Powermockito可以与Android Studio 1.2一起使用吗?

我正在使用Android Studio 1.2和com.android.tools.build:gradle:1.2.2插件。 尝试1 我在我的app/build.gradle包含以下app/build.gradle : androidTestCompile ('com.google.dexmaker:dexmaker-mockito:1.2') androidTestCompile ('org.powermock:powermock-mockito-release-full:1.6.2') 但随后PowerMockito包不可用于导入: error: cannot find symbol PowerMockito.mockStatic(DatastoreFactory.class); ^ 尝试2 我在我的app/build.gradle包含以下app/build.gradle : androidTestCompile ('org.powermock:powermock-api-mockito:1.6.2') { exclude module: 'hamcrest-core' exclude module: 'objenesis' } androidTestCompile ('org.powermock:powermock-module-junit4:1.6.2') { exclude module: 'hamcrest-core' exclude module: 'objenesis' } 这是这个问题的试验和错误的分支: AndroidStudio / Gradle with powermock 这编译,但是当运行Mockito给出一个运行时错误: java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167) at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) […]

PowerMockito:在模拟NotAMockException

一个复杂的设置位。 Robolectric,PowerMockito基于规则的configuration。 @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) // Using "PrepareOnlyThis" prevents powermock from trying to instrument the whole hierarchy, // part of which we've ignored (android.os.* in this case) @PrepareOnlyThisForTest({ServiceCallbackBase.class}) // this class extends Handler, // so we need PrepareOnlyThis. It also has some final methods we need to verify() […]

如何在Android项目中使用PowerMock?

我创build了一个新的Androidtesting项目。 我从https://code.google.com/p/powermock/downloads/list下载了powermock-mockito-junit-1-1.5.zip。 我将所有库添加到testing项目的libs文件夹中。 testing类是一个非常简单的对象: package com.test.test; import org.junit.runner.RunWith; import org.powermock.modules.junit4.PowerMockRunner; import android.util.Log; @RunWith(PowerMockRunner.class) public class TestTestAndroid { public void testRuns() { Log.e("test", "Test case is called"); } } 然后,我尝试从Eclipse运行项目,或者从命令行创build项目。 我犯了同样的错误: Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description; 事实certificate, junit-4.8.2.jar和mockito-all-1.9.5.jar定义了org.hamcrest.Description 。 我必须包括Mockitojar子,原因很明显 – 我需要Mockito。 Android提供了不同版本的JUnit,但它是旧版本,不包含@RunWith注释。 有人可以回答如何在Android项目中使用powermock和mockito,没有冲突的org.hamcrest.Description问题?

嘲笑方法调用使用权力mockito – org.powermock.api.mockito.ClassNotPreparedException

我有一个图像加载器类,我需要testing其中的一些静态方法。 由于Mockito不支持静态方法我切换到电源Mockito。 但是我正在testing的静态方法有一个方法调用 Base64.encodeToString(byteArray, Base64.DEFAULT); 为了模拟这个我正在使用mockStatic方法,如下面的@PrepareForTest批注。 PowerMockito.mockStatic(Base64.class); 但Android工作室正在返回我还给我一个错误如下。 org.powermock.api.mockito.ClassNotPreparedException:类android.util.Base64没有准备testing。 要准备这个类,请将类添加到“@PrepareForTest”注释中。 以下是我的完整代码。 要testing的代码: import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Base64; import android.widget.ImageView; public static String convertBitmapToBase64(Bitmap imageBitmap, boolean withCompression) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); imageBitmap.compress(Bitmap.CompressFormat.PNG, 120, byteArrayOutputStream); byte[] byteArray = byteArrayOutputStream.toByteArray(); return Base64.encodeToString(byteArray, Base64.DEFAULT); } testing课程代码 import android.graphics.Bitmap; import android.util.Base64; import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; […]

我可以在PowerMock的unit testing上使用Cobertura吗?

问题 我正在为使用Robolectric运行testing的Android库和PowerMock / Mockito进行模拟testing设置unit testing代码覆盖范围。 但是,使用Cobertura运行unit testing会导致以下exception… :example:testDebugUnitTest Exception in thread "Thread-5" java.lang.ExceptionInInitializerError at com.example.package.saas.Query$RemoveWordsType.__cobertura_init(Query.java) at com.example.package.saas.Query$RemoveWordsType.<clinit>(Query.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesToSingleClassOnProjectData(TouchCollector.java:123) at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:110) at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:272) at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:33) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalStateException: Shutdown in progress at java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:66) at java.lang.Runtime.addShutdownHook(Runtime.java:211) at net.sourceforge.cobertura.coveragedata.ProjectData.initialize(ProjectData.java:239) at net.sourceforge.cobertura.coveragedata.ProjectData.getGlobalProjectData(ProjectData.java:209) at net.sourceforge.cobertura.coveragedata.TouchCollector.<clinit>(TouchCollector.java:45) … 11 more […]

使用PowerMock和Robolectric – IncompatibleClassChangeError

我正在尝试使用PowerMockito来模拟Android Robolectrictesting中的一些静态方法。 我正在使用JUnit 4.8.2,Robolectric 2.2,Mockito 1.9.5和PowerMock 1.9.5。 由于我必须使用RoboElectricTestRunner ,所以我试图使用PowerMockRule来引导PowerMock。 不过,当运行PowerMock的testing时,我得到了一个不幸的java.lang.IncompatibleClassChangeError 。 java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597) 在sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:348) 引起:java.lang.IncompatibleClassChangeError:在java.lang.ClassLoader.defineClass1上实现类(Native Method) java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)at java.lang.ClassLoader.defineClass(ClassLoader.java:621)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 如果我把org.ow2.asm库之后的org.powermock得到: java.lang.IncompatibleClassChangeError:org.objectweb.asm.tree.ClassNode org.objectweb.asm.ClassNode org.objectweb.asm.ClassVisitor java.lang.ClassLoader.defineClass(java.lang.ClassLoader.defineClass1(Native Method)java.lang.ClassLoader.defineClassCond(ClassLoader .java:637)在java.net.URLClassLoader.defineClass(URLClassLoader.java:283)上的java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)上的java.lang.ClassLoader.defineClass(ClassLoader.java:621) java.net.URLClassLoader.access $ 000(URLClassLoader.java:58)java.net.URLClassLoader $ 1.run(URLClassLoader.java:197)at java.security.AccessController.doPrivileged(Native Method) 在每个unit testing。 根据Maven的依赖:树Robolectric和PowerMock不共享任何依赖关系。 但显然org.powermock:powermock-module-javaagent封装了一些org / objectweb / asm类,而Robolectric依赖于org.ow2.asm:asm:jar:4.1导致冲突。 @RunWith(RobolectricTestRunner.class) @PrepareForTest(Helper.class) @PowerMockIgnore({"com.sun.jmx.*", "javax.management.*"}) public class HelpFragTest { @Rule public […]

AndroidStudio / Gradle与powermock

我找不到有关如何使用Android Studio / Gradle设置powermock的任何信息。 我试过的一切都导致了构buildexception。 任何人都可以显示正确的方法来做到这一点? 谢谢。