Articles of junit4

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能够快速获得结果。

Espresso UI测试无法识别onView()

我花了一整天用Espresso设置Junit4仪器测试,但似乎无法完成最后一步。 无论我做什么,它都无法识别onView()方法。 我已经尝试了多个SDK / support-lib版本,到目前为止还没有。 我已经浏览了所有谷歌设置指南和许多stackoverflowpost,转到这里作为我的最后希望。 Gradle版本: com.android.tools.build:gradle:1.5.0 : com.android.tools.build:gradle:1.5.0 : com.android.tools.build:gradle:1.5.0 Gradle文件: apply plugin: ‘com.android.application’ apply plugin: ‘com.google.gms.google-services’ android { compileSdkVersion 23 buildToolsVersion “23.0.2” useLibrary ‘org.apache.http.legacy’ defaultConfig { applicationId “lv.my.android” minSdkVersion 9 targetSdkVersion 22 testApplicationId “lv.my.android.tests” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } packagingOptions { exclude ‘LICENSE.txt’ exclude ‘META-INF/DEPENDENCIES’ exclude ‘META-INF/LICENSE’ exclude ‘META-INF/NOTICE’ } compileOptions { sourceCompatibility = […]

在设备操作testing期间,“animation师只能在Looper线程上运行”

这是我的testing代码: @RunWith(AndroidJUnit4.class) @SmallTest public class WelcomeActivityTests extends BaseTest { ApplicationController applicationController; @Rule public ActivityTestRule<WelcomeActivity> activityTestRule = new ActivityTestRule<>(WelcomeActivity.class); ArgumentCaptor<Callback> argumentCaptor; @Before @Override public void setUp() { applicationController = (ApplicationController) InstrumentationRegistry.getTargetContext().getApplicationContext(); applicationController.setMockMode(true); argumentCaptor = ArgumentCaptor.forClass(Callback.class); super.setUp(); } @Test public void testLogin() throws InterruptedException { onView(withId(R.id.btnLogInW)).perform(click()); onView(withId(R.id.email)).perform(typeText("good.email@example.com")); onView(withId(R.id.passL)).perform(typeText("strong.password")); onView(withId(R.id.btnLogInL)).perform(click()); User user = new User(); user.first_name = "Fake […]