Articles of unit testing

使用ant与库项目的Androidunit testing

似乎最新的Android SDK工具仍然不能正确支持包含链接库项目的应用程序的测试。 我有一个项目,具有以下设置: TestLib(android库项目)< – TestMain(android项目)< – TestMainTest(android单元测试项目) 我在eclipse中创建了所有这些项目,然后使用android update (test-/lib-)project …来生成build.xml等。 人。 只要在TestMain(我的示例中为InheritAddition.java)中有一个inheritance自TestLib( Addition.java )中的类并且您想在unit testing( InheritAdditionTest.java )中引用此类的类,问题InheritAdditionTest.java 。 TESTLIB public class Addition { public int add2(int o1, int o2) { return o1 + o2; } } TestMain public class InheritAddition extends Addition { public int sub(int p1, int p2) { return p1 – […]

使用robolectric测试异步任务

你知道如何使用Robolectric实现AsyncTasks的unit testing吗? 任何指针将不胜感激。

Gradle + Robolectric:我在哪里放置文件org.robolectric.Config.properties?

我正在尝试使用Robolectric设置测试,点击此存储库中的菜单按钮。 基本的Robolectric测试将运行,但我无法使用资源运行任何项目特定的测试,因为它说它无法find我的AndroidManifest.xml。 运行../gradlew clean check ,这是Robolectric html文件的标准输出: WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. To remove this warning, annotate your test class with @Config(manifest=Config.NONE). 我发现这些说明表明我应该创建一个org.robolectric.Config.properties文件,但我不知道该放在哪里。 我几乎到处都试过,尽管移动了文件,但错误信息中的路径始终与上面相同(./AndroidManifest.xml)。 这让我觉得构建过程从未在文件org.robolectric.Config.properties设置。 我也尝试了@Config(manifest =“”)指令,但这给了我一个cannot find symbol错误。 如果我将AndroidManifest.xml移动到我的项目目录中,那么我得到一个错误,它无法find路径./res/values ,我也无法解决。 有任何想法吗? 更新1 感谢Eugen,我现在使用@RunWith(RobolectricGradleTestRunner.class)而不是@RunWith(RobolectricTestRunner) 。 现在我得到了一个不同的错误,仍然发生在我的BasicTest.java的同一行 KeywordList keywordList = Robolectric.buildActivity(KeywordList.class).create().get(); 以下是Robolectric测试报告中标准错误,标准输出和“失败测试”选项卡的结果: 注意:我也尝试用最新的Robolectric更新,robolectric-2.2-SNAPSHOT.jar构建的jar替换,但仍然出错。 标准错误 WARNING: no system […]

Android:如何在unit testing期间重置/清除应用程序首选项?

我想从一致的测试环境开始,所以我需要重置/清除我的首选项。 这是我到目前为止测试的SetUp。 它没有报告任何错误,我的测试通过了,但是没有清除首选项。 我正在测试“MainMenu”活动,但我暂时切换到OptionScreen活动(扩展了Android的PreferenceActivity类。)我确实看到测试在运行期间正确打开了OptionScreen。 public class MyTest extends ActivityInstrumentationTestCase2 { … @Override protected void setUp() throws Exception { super.setUp(); Instrumentation instrumentation = getInstrumentation(); Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(OptionScreen.class.getName(), null, false); StartNewActivity(); // See next paragraph for what this does, probably mostly irrelevant. activity = getActivity(); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); settings.edit().clear(); settings.edit().commit(); // I am pretty sure […]

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 […]