Articles of unit testing

Android设备在无头机上与Jenkins一起测试

我正在收集信息,以便在无头机器上设置Jenkins CI服务器,以进行Androidunit testing。 但是,由于Androidunit testing需要运行模拟器,因此需要图形环境,或者是否可以在非图形模式下运行模拟器? Jenkins Android Emulator插件上的wiki条目在这个问题上也不是很有启发性,它指出: 如果你有无头运行的构建奴隶(例如不运行X服务器的Linux服务器),建议利用Jenkins的Xvnc插件。 启用此插件后,您可以在无头奴隶上并行运行多个Android模拟器,同时保持启用“显示模拟器窗口”选项。 这是否意味着模拟器可以在无头机器上运行,并禁用“显示模拟器窗口”选项? 如果需要图形环境,大多数消息来源所说的最简单的解决方案是使用Xvnc插件,该插件使用Xvnc服务器来提供X实例。 但是,如果我理解正确,这个Xvnc服务器必须在另一台可用X的机器上运行,或者它是否在无头机器上运行,从那里提供X实例?

在Android Studio中为unit testing设置自定义资源目录

我们有一个非常罕见的要求,即我们的Android应用程序执行unit testing,这些测试使用了仅需要进行unit testing的资产。 使用基于Eclipse的SDK,这很简单明了 – 测试项目是一个带有自己资产文件夹的独立项目。 对于Android Studio,这意味着可以在build.gradle(或按惯例)配置。 最后,我们的unit testing正在执行,但我已经用尽了所有关于自定义(和理想情况下,合并)资源文件夹的建议。 这是我尝试过的: 在android闭包中向sourceSets添加一个测试闭包(通过闭包我的意思是在build.gradle中的花括号之间)。 androidTest { assets.srcDirs = [‘src/androidTest/assets/’] } 同样的事情,但使用“test”作为sourceSet的名称(与上面的“androidTest”相对)以及“instrumentTest”。 上面的各种组合,加上androidTest.setRoot(“test”),androidTest.setRoot(“androidTest”),这两者都导致我们的unit testing无法被识别(“空套件”)。 这个问题可以更一般地说是“如何在Android Studio中使用不同的目录进行unit testing”。 我们已经浏览了Android的文档,要么我们不理解它,它是错误的,或者某处有错误。 任何帮助将非常感谢。

如何在Android Studio 1.1中运行简单的JUnit4测试?

我有一个显示“Hello World”的Android项目。 它是从Android Studio的“空白活动”模板创建的。 然后我在我的应用程序包中添加/创建一个新的java类(与我的活动相同的包)。 我称之为Shape并添加一个简单的构造函数 public class Shape { public Shape(int i){ if (i==0){ throw new IllegalArgumentException(“Cant have 0”); } } } 大。 现在我有一个完全没有触及Android的课程,我想对它进行unit testing。 接下来我该怎么办? 这是我的问题停止的地方。 下面我将介绍我尝试过的内容。 请注意,我以前从未在Android或Java中测试过。 对不起“菜鸟”的错误。 在Shape.java中我转到“导航”>“测试” 按Enter键选择“创建新测试” 获取此popup窗口,然后选择JUNIT4。 然后我点击修复按钮修复未find的库 我得到这个popup窗口 我不确定要选择什么,所以我选择默认/突出显示。 我写了我的考试 package com.eghdk.getjunit4towork; import org.junit.Test; import static org.junit.Assert.*; public class ShapeTest { @Test(expected = IllegalArgumentException.class) public void testShapeWithInvalidArg() […]

AndroidManifest在androidTest目录中被忽略

我正在尝试使用以下目录结构(由Android Studio设置)进行测试: 我可以运行一些测试,甚至AllTests.java运行正常,而AndroidManifest.xml文件甚至没有。 问题是,对于我的一个新测试,我需要android.permission.INTERNET权限。 所以,我将以下内容添加到androidTest目录中的AndroidManifest.xml文件中: 不幸的是,这不起作用。 当我运行我的一个测试时,我仍然收到以下错误: E / RestAPIRequestTest:权限被拒绝(缺少INTERNET权限?) 我已经尝试在我的AndroidManifest.xml文件中将package设置为com.example.core.test (因为它是我在Settings-> Apps列表中显示的内容),但没有任何乐趣。 我认为它甚至不能识别AndroidManifest.xml文件,因为版本号也没有显示在测试应用程序的设置中。 如何为我的测试项目注入正确的权限?

Android JUnit4测试 – 从哪里获取上下文?

我必须构建一个使用sqlite的应用程序。 现在我想写unit testing。 这些unit testing应该测试我的SQLiteBridge类。 SQLiteBridge为每个子类Model提供DAO。 现在我遇到了一个问题,我需要一个上下文来创建我的SQLiteBridge 。 SQLiteBridge在系统上创建和处理SQLite数据库。 从哪里获取Context-Object? 我的设置就像在这里(所以我使用的是Junit4 [感谢上帝]): http : //tools.android.com/tech-docs/unit-testing-support 编辑:我希望有一种方式像旧的AndroidTestCase扩展而不会丢失Junit4。 🙂

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

问题 我正在为Android库设置unit testing代码覆盖率,该库使用Robolectric运行测试, PowerMock / Mockito用于模拟测试。 但是,使用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.(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.(TouchCollector.java:45) … 11 […]

Android RxJava 2 JUnit测试 – android.os.Looper中的getMainLooper没有模拟RuntimeException

我在尝试为使用observeOn(AndroidSchedulers.mainThread())的演示者运行JUnit测试时遇到RuntimeException。 由于它们是纯JUnit测试而不是Android检测测试,因此它们无法访问Android依赖项,导致我在执行测试时遇到以下错误: java.lang.ExceptionInInitializerError at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:35) at io.reactivex.android.schedulers.AndroidSchedulers$1.call(AndroidSchedulers.java:33) at io.reactivex.android.plugins.RxAndroidPlugins.callRequireNonNull(RxAndroidPlugins.java:70) at io.reactivex.android.plugins.RxAndroidPlugins.initMainThreadScheduler(RxAndroidPlugins.java:40) at io.reactivex.android.schedulers.AndroidSchedulers.(AndroidSchedulers.java:32) … Caused by: java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details. at android.os.Looper.getMainLooper(Looper.java) at io.reactivex.android.schedulers.AndroidSchedulers$MainHolder.(AndroidSchedulers.java:29) … java.lang.NoClassDefFoundError: Could not initialize class io.reactivex.android.schedulers.AndroidSchedulers 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) …

为什么我的JSONObject相关unit testing失败?

我正在使用gradle testFlavorType运行我的测试 JSONObject jsonObject1 = new JSONObject(); JSONObject jsonObject2 = new JSONObject(); jsonObject1.put(“test”, “test”); jsonObject2.put(“test”, “test”); assertEquals(jsonObject1.get(“test”), jsonObject2.get(“test”)); 上述测试成功。 jsonObject = new SlackMessageRequest(channel, message).buildBody(); String channelAssertion = jsonObject.getString(SlackMessageRequest.JSON_KEY_CHANNEL); String messageAssertion = jsonObject.getString(SlackMessageRequest.JSON_KEY_TEXT); assertEquals(channel, channelAssertion); assertEquals(message, messageAssertion); 但上述两个请求失败了。 堆栈跟踪表明channelAssertion和messageAssertion为null,但不确定原因。 我的问题是: 为什么上述两个断言都失败了? 下面是SlackMessageRequest 。 public class SlackMessageRequest extends BaseRequest { // region Variables public static final String […]

在调用getActivity()之前从Setup()中的TestSuite访问应用程序上下文

我有一个Activity ,它从OnCreate()方法中的Application扩展类(应用程序上下文)中提取对象。 unit testing此活动时,所需的对象不存在,因为它是从先前的Activity填充并存储在上述应用程序上下文中。 不用说,当我从ActivityInstrumentationTestCase2扩展测试用例中调用getActivity() ,我得到一个空指针exception。 如何在活动开始之前填充上下文并将其提供给该Activity ? 更新:经过一些挖掘后,我发现: this.getInstrumentation().getTargetContext()然后将其this.getInstrumentation().getTargetContext()转换为我的Application扩展类的types。 但我得到一个类强制转换exception,跟踪指向这个: 04-04 21:02:27.036: INFO/TestRunner(431): started: testIt(edu.rockies.rockies.activity.courses.test.TopicTest) 04-04 21:02:27.126: INFO/TestRunner(431): failed: testIt(edu.rockies.rockies.activity.courses.test.TopicTest) 04-04 21:02:27.126: INFO/TestRunner(431): —– begin exception —– 04-04 21:02:27.136: INFO/TestRunner(431): java.lang.ClassCastException: android.app.ApplicationContext 04-04 21:02:27.136: INFO/TestRunner(431): at edu.rockies.rockies.activity.courses.test.TopicTest.setUp(TopicTest.java:27) 04-04 21:02:27.136: INFO/TestRunner(431): at junit.framework.TestCase.runBare(TestCase.java:125) 04-04 21:02:27.136: INFO/TestRunner(431): at junit.framework.TestResult$1.protect(TestResult.java:106) 04-04 21:02:27.136: INFO/TestRunner(431): at junit.framework.TestResult.runProtected(TestResult.java:124) 04-04 21:02:27.136: […]

AssertionFailedError:没有公共构造函数

我正在使用Android Studio,我需要在我的项目中添加unit testing。 我阅读了各种教程,但没有任何内容让我感到困惑。 我的问题是: TestXMLParser.java: public class TestXMLParser extends ActivityInstrumentationTestCase2 { public TestXMLParser(Class activityClass) { super(activityClass); } @Override public void setUp() throws Exception { super.setUp(); //Controller.init((Activity)getContext()); } @Override public void tearDown() throws Exception { super.tearDown(); } public void testTrue() throws Exception { assertTrue(true); } … } 当我运行它时,我看到这条消息: junit.framework.AssertionFailedError: Class cz.cvut.kosapp.jUnitTests.TestXMLParser has no public constructor […]