Articles of unit testing

使用ProGuard,对测试策略有何影响?

我最近需要在Android上引入ProGuard,因为Android上的Scala存在问题。 我需要ProGuard的缩小function,它可以删除假定未使用的类。 我非常关注删除类对可测试性的影响。 就目前而言,我编写了在主机上运行的unit testing和在Android平台上运行完全集成的应用程序的验收测试。 通常情况下,我会对相对完整的unit testing覆盖率和不稳定的验收测试覆盖率感到满意。 但是,鉴于在我的代码中我大量使用Guicedependency injection,到目前为止,我的经验是ProGuard以一种我难以预测的方式删除代码。 因此,它很可能会导致我引入错误。 这让我相信我需要编写完全覆盖的接受/平台测试,因为在任何时候,都可能缺少类。 其他人有这种经历吗? 如果是这样,你的测试策略是什么? 或者凭借经验,您是否更加确信ProGuard正在删除的课程真的不需要?

Instrumentation.ActivityMonitor不监控Intent.ACTION_CALL

我有一个简单的测试用例,用于测试是否在按钮点击时启动了拨出呼叫。 public void testCalling(){ IntentFilter callFilter = new IntentFilter(); callFilter.addAction(Intent.ACTION_CALL); callFilter.addCategory(Intent.CATEGORY_DEFAULT); callFilter.addDataScheme(“tel:”); ActivityMonitor mMonitor = new ActivityMonitor(callFilter, null, false); getInstrumentation().addMonitor(mMonitor); mSolo.clickOnText(“CALL”); assertTrue(0 < mMonitor.getHits()); sendKeys(KeyEvent.KEYCODE_ENDCALL); } 虽然调用了Intent(传出调用),但我的ActivityMonitor无法注册它。 堆栈跟踪是 05-28 17:11:09.183: I/ActivityManager(71): Starting activity: Intent { act=android.intent.action.CALL dat=tel:+xxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster } 请帮忙 我能find的唯一其他资源就是这个讨论结束时没有 Android开发者组的任何解决方案

Travis VS CircleCi VS Jenkins

我正在为我的android项目编写测试,因为我的团队中有不止一个开发人员,当我们将代码推送到Git时,我们想要自动构建的提交,所以我们现在正在考虑集成像Travis这样的CI系统或CircleCI 。 由于有多个选项可供使用,我想选择一个自动构建和运行测试用例的程序,同时构建主应用程序,以便在测试失败以及需要进行哪些更改时通知团队成员在他们的代码中。 我已经尝试过特拉维斯,它很好,(配置github repo时有些令人头疼),我想知道你们中是否有人在这里试过这三个问题并为我们的目的提出建议。

从gradle运行单个Android(单元)测试,而不加载其他项目依赖项

我正在使用Jake Wharton的精彩插件进行Androidunit testing。 我努力让这些unit testing运行的目的是为了速度(TDD快速反馈和所有)。 我已经设法正确配置它并运行一些示例测试,如下所示: ./gradlew test 每当我运行测试时,我会注意到以下输出: Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0 The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead. The TaskContainer.add() […]

如何测试IntentService android?

如何在不使用已弃用的ServiceTestCase情况下在android中测试IntentService ? 从ServiceTestCase的文档: 此类在API级别24中已弃用。请改用ServiceTestRule。 应使用Android测试支持库编写新测试。 但是ServiceTestRule文档说它不支持IntentService : 注意:此规则不支持IntentService,因为当onHandleIntent(android.content.Intent)完成所有未完成的命令时,它会自动销毁。 因此无法保证及时建立成功的连接。 那我该怎么测试一个IntentService呢?

将powermock添加到android测试项目时,apkbuilder会find重复的文件

我正在尝试将powermock–mockito和mockito添加到Android Test项目中。 我使用android命令行工具创建了android测试项目来创建build.xml和项目结构。 我的libs /目录中有以下jar: dexmaker-1.0.jar dexmaker-的Mockito-1.0.jar 的Mockito-ALL-1.9.5.jar powermock-的Mockito-1.5-full.jar 当我尝试使用ant debug构建项目时,我收到以下错误: [apkbuilder] Creating ProjectTests-debug-unaligned.apk and signing it with a debug key… [apkbuilder] Found duplicate file for APK: mockito-extensions/org.mockito.plugins.MockMaker [apkbuilder] Origin 1: /home/cmiller/Projects/android-project/ProjectTests/libs/powermock-mockito-1.5-full.jar [apkbuilder] Origin 2: /home/cmiller/Projects/android-project/ProjectTests/libs/powermock-mockito-1.5-full.jar BUILD FAILED /home/cmiller/Applications/adt-bundle-linux/sdk/tools/ant/build.xml:951: The following error occurred while executing this line: /home/cmiller/Applications/adt-bundle-linux/sdk/tools/ant/build.xml:962: The following error occurred while executing this […]

将解析信息添加到Robolectric包管理器

这个问题非常类似于我想要做的事情: 我如何用Robolectric来影响PackageManager 但是,所有答案都依赖于ShadowApplication.setPackageManager()。 在2.2中,这种方法似乎不再存在: http : //robolectric.org/javadoc/org/robolectric/shadows/ShadowApplication.html 我试图抓住包管理器并添加解析信息: RobolectricPackageManager packageManager = (RobolectricPackageManager) Robolectric.application.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN,null); intent.addCategory(Intent.CATEGORY_HOME); ResolveInfo ri = new ResolveInfo(); ActivityInfo ai = new ActivityInfo(); ai.packageName = “com.fun.test”; ri.activityInfo = ai; ri.isDefault = true; packageManager.addResolveInfoForIntent(intent, ri); 但无济于事。 有谁知道如何做到这一点?

测试类通过ORMLite的DAO与DB通信

我正在尝试采用TDD方法来创建Android应用程序。 我正在使用ORMLite和Mockito / Robolectric进行测试。 我在测试一个简单的事情时遇到了麻烦: (包含DAO调用的某些类中的方法) public List getTasksForNextTwoWeeks() throws SQLException { // Code to be written } 好吧,里面的代码只是一个正确的查询方法调用。 测试该代码的最佳方法是什么? 我一直在考虑这个问题,但如果没有访问真正的数据库(无论是真实数据库还是测试数据库),都无法想到解决方案。 欢迎任何建议。

如何使用内置框架对在Android中使用HttpClient的类进行unit testing?

我有一节课: public class WebReader implements IWebReader { HttpClient client; public WebReader() { client = new DefaultHttpClient(); } public WebReader(HttpClient httpClient) { client = httpClient; } /** * Reads the web resource at the specified path with the params given. * @param path Path of the resource to be read. * @param params Parameters needed to […]

在unit testing中模拟注入的字段

我有一个Presenter类,它使用通过Dagger注入的字段,它看起来像这样: public class RssListPresenter { @Inject RssService rssService; // <– injected field public RssListPresenter() { setupDI(); } private void setupDI() { DaggerNetworkComponent.builder() .networkModule(new NetworkModule()) .build() .inject(this); } public void loadItems() { Rss rss = rssService.getRssFeed() // …. } } 一切正常。 现在,我想对RssListPresenter类进行unit testing。 问题是我如何向演示者提供模拟RssService ? 当然,我可以向演示者添加一个新方法setRssService(RssService rssService)并使用它来提供unit testing的模拟,但是仅仅为unit testing添加此方法感觉不对。 处理这个问题的正确方法是什么? 为了完整性,这里是模块和组件声明: @Singleton @Component(modules = NetworkModule.class) public […]