Articles of junit4

使用JUnit和JDK测试Android代码

我正在为我的Android代码编写一些POJO测试。 我想用JDK本地运行它们(不是在模拟器上使用Dalvik) – 速度,JUnit 4,Mockito,并且能够在没有设备的情况下运行无头 – 所以我在Eclipse中有一个单独的“Java”项目。 如果我正在测试的方法恰好引用Android SDK中的任何内容,例如android.util.Log ,则测试失败 – 这是有道理的,因为android.jar不在类路径中。 重现我有这个测试用例: public class FooTests { @Test public void testFoo() { android.util.Log.d(“x”, “y”); } } 如果我将android.jar显式添加到测试项目的类路径中,我会得到类似的exception java.lang.RuntimeException: Stub! at android.util.Log.d(Log.java:7) at com.example.FooTests.testFoo(FooTests.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) … at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 有没有办法让代码工作而不会嘲笑Android SDK依赖的最后一点? 也许一个嘲笑的android.jar已经存在? 编辑 :现在我最终包装了像android.util.Log这样的类,并将它们注入到实例中,用于经典的基于IOC的测试。 斯科特的PowerMock建议是我需要它的下一步。 后期 编辑 : Robolectric !

在Android中测试非活动类

我知道如何在Android中使用JUnit 4测试Activity类,但我无法理解如何测试非活动类(不扩展Activity,ListActivity或其他一些Activity类,但使用一些Android API)。 请帮助我这方面。

AndroidJunit4的InitializationError

我的Android应用模块中有一个简单的unit testing: /src/test/java/org.acme.test/SimpleTest.java 当我跑: ./gradlew clean testDebug –tests=’*.SimpleTest’ 我得到这个例外: java.lang.Exception: Custom runner class AndroidJUnit4 should have a public constructor with signature AndroidJUnit4(Class testClass) 为什么它认为’AndroidJUnit4’是一个自定义的跑步者类,当它是最后一堂课?

使用JUnit +的unit testing用例(Android中的Robolectric或Mockito或两者)

这是我第一次在Android中编写unit testing用例。 所以我搜索了很多东西。 Robolectric framewordk – 在JVM上运行 Mockito Framwork – 模拟物体 所以我对Robolectric和Mokito有些怀疑。 我是否必须在Android应用中仅使用Robolectric和JUnit? 我应该只在Android应用中使用Mockito吗? 我应该同时使用这两个框架吗? Mockito和Robolectric有什么区别? 我在寻找Mokito和Robolectric之间的区别,但没有得到任何正确的答案。 请建议。

在运行测试之前,android espresso登录一次

我一直试图通过测试覆盖我的Android应用程序,并且最近开始使用espresso 。 到目前为止,它印象深刻。 但是,我的应用程序的大部分function都要求用户登录。由于所有测试都是独立的,因此需要为每个测试注册一个新用户。 这很好,但是每次测试所需的时间都因此而大大增加。 我试图find一种方法在类(测试)中注册一次用户,然后使用相同的用户帐户来执行该类中的所有测试。 我能够做到这一点的一种方法是实际上只有一个测试( @Test )方法按我想要的顺序运行所有其他测试。 然而,这是一种全有或全无的方法,因为gradle cAT任务仅在结束时输出结果一次,而不提供有关可能已通过/失败的中间测试的信息。 我也尝试了@BeforeClass方法但是没有工作(没有我使用过它的类的gradle输出,即使使用调试选项,它似乎花了很长时间才进入下一类测试)。 是否有更好的方法在课程开始时注册用户一次,然后在测试结束时注销一次? 任何帮助赞赏。

为什么我不能将AndroidJUnit4和ActivityTestRule导入我的unit testing类?

我在导入一些Android UI测试框架时遇到了麻烦 – 我无法弄清楚出了什么问题! 这是我的class级: @RunWith(AndroidJUnit4.class) @LargeTest public class ExampleUnitTest { @Rule public ActivityTestRule mActivityRule = new ActivityTestRule(MainActivity.class); @Test public void listGoesOverTheFold() { onView(withText(“Hello world!”)).check(matches(isDisplayed())); } } 但由于某种原因,我得到错误’找不到符号ActivityTestRule’和’找不到符号AndroidJUnit4’。 我试图导入它们但无法find它们。 build.gradle中的依赖项设置为: compile fileTree(dir: ‘libs’, include: [‘*.jar’]) testCompile ‘junit:junit:4.12’ compile ‘com.android.support:appcompat-v7:23.4.0’ androidTestCompile ‘com.android.support:support-annotations:23.4.0’ androidTestCompile ‘com.android.support.test:runner:0.4’ androidTestCompile ‘com.android.support.test:rules:0.4’ androidTestCompile ‘com.android.support.test.espresso:espresso-core:2.2.1’ androidTestCompile ‘com.android.support.test.uiautomator:uiautomator-v18:2.1.2’ 所以我认为我已经设置了所有依赖项 – 我一直在尝试很多东西,但没有运气。 有人有主意吗?

测试ClassNotFoundexception

我正在尝试测试Android上的UnitTest找不到类。 这是怎么回事: 1.我正在编写一个具有transitive依赖关系的android库,这些依赖关系在宿主应用程序中得到解决 2.开发人员可能会删除一些依赖项,例如删除所有com.example.package 3.我有一个工厂,它将尝试实例化(使用reflection)一个Object并捕获ClassNotFoundException 。 如果开发人员删除了依赖项,则应抛出exception。 4.我想测试这个案例,但我发现的只是依赖关系的问题,而不是如何测试它。 示例代码我想测试 try { sNetworkResponseBuilderClass = OkHttpNetworkResponse.Builder.class; } catch (Exception e){ // <<<< I want to test this case new ClassNotFoundException("Unable to find OkHttpNetworkResponse.Builder.class").printStackTrace(); return null; } 使用的库: hamcrast,mockito,JUnit 4。 你知道怎么做吗?

Android:Robolectric不支持API级别1

这是我的基础测试类: @RunWith(RobolectricTestRunner.class) public class MainActivityTest { @Before public void setup() { //do whatever is necessary before every test } @Test public void testActivityFound() { Activity activity = Robolectric.buildActivity(MainActivity.class).create().get(); Assert.assertNotNull(activity); } } 当我在Android Studio下使用终端窗口执行我的测试时,出现此错误: java.lang.UnsupportedOperationException: Robolectric does not support API level 1, sorry! at org.robolectric.SdkConfig.(SdkConfig.java:24) at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.java:320) at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.java:296) at org.robolectric.RobolectricTestRunner.access$300(RobolectricTestRunner.java:61) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:202) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at […]

需要帮助使用Mockito和JUnit4编写unit testing

需要帮助使用Mockito和JUnit4为以下代码编写unit testing, public class MyFragmentPresenterImpl { public Boolean isValid(String value) { return !(TextUtils.isEmpty(value)); } } 我试过以下方法:MyFragmentPresenter mMyFragmentPresenter @Before public void setup(){ mMyFragmentPresenter=new MyFragmentPresenterImpl(); } @Test public void testEmptyValue() throws Exception { String value=null; assertFalse(mMyFragmentPresenter.isValid(value)); } 但它返回以下exception, java.lang.RuntimeException:未模拟android.text.TextUtils中的方法isEmpty。 有关详细信息,请参阅http://g.co/androidstudio/not-mocked 。 在android.text.TextUtils.isEmpty(TextUtils.java)….

用gradle测试一个android项目的junit测试

我试图让测试(junit和robolectric)在Android项目中工作,但我完全陷入困境。 我的主要问题是我用gradlefind的所有测试都以某种方式拉入了java插件然后我得到了这个错误: The ‘java’ plugin has been applied, but it is not compatible with the Android plugins. 我目前看到的唯一出路是分成测试和应用项目 – 但我想避免这种情况。 任何示例/提示都将受到高度赞赏! 在官方文档中没有提到unit testing – 只有仪器测试 – 但我希望unit testing能够快速获得结果。