我如何在Android Studio中创buildtesting?

刚刚下载的基于Intellij Idea的Android Studio。

如何创buildtesting?

我注意到有创build一个testing模块的选项,但这似乎并没有做任何事情,只用src创build一个新的项目

我也尝试按CTRL + AlT + T的热键,它允许在现有的类上创buildunit testing,但它似乎想要把它放在当前的项目中。 当然这对TDD没有帮助

有没有人在这里有任何经验?

编辑:从0.1.8开始,现在在IDE中支持 。 请按照这里的说明,而不是使用下面的说明。

遵循Android Gradle插件用户指南我能够通过在新创build的项目(我使用默认的“com.example.myapplication”包)上执行以下步骤来获得在命令行上工作的testing:

  1. 为testing添加一个src / instrumentTest / java目录
  2. 在包com.example.myapplication.test中添加一个testing类(扩展ActivityTestCase)
  3. 启动一个虚拟设备
  4. 在命令行上(在MyApplicationProject / MyApplication目录中)使用命令“../gradlew connectedInstrumentTest”

这运行了我的testing,并将testing结果放在MyApplicationProject / MyApplication / build / reports / instrumentTests / connected。 我新来testingAndroid应用程序,但它似乎工作正常。

在IDE中,可以尝试运行相同的testing类。 你需要

  1. 更新build.gradle列出Maven Central作为回购
  2. 更新build.gradle添加JUnit 3.8作为一个instrumentTestCompile依赖例如instrumentTestCompile'junit:junit:3.8'
  3. 在“项目结构”中手动移动JUnit,使其成为依赖顺序中的第一个

但是,这会失败(运行testing时使用的类path缺lesstesting输出目录)。 不过,我不确定这会工作,不pipe我的理解是需要一个Android特定的testing运行器。

我会build议使用gradle.build文件。

  1. 为testing添加一个src / androidTest / java目录(就像Chris开始解释的那样)

  2. 打开gradle.build文件并在那里指定:

    android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion sourceSets { androidTest { java.srcDirs = ['androidTest/java'] } } } 
  3. 按下“与Gradle文件同步项目”(在顶部面板)。 你应该看到一个文件夹“java”(在“androidTest”内)是一个绿色。

  4. 现在您可以在那里创build任何testing文件并执行它们。

我觉得Rex St John的这个post对于android studio的unit testing非常有用。

http://rexstjohn.com/wp-content/uploads/2014/01/Screen-Shot-2014-01-24-at-6.26.20-PM-300×137.png

这个答案适用于刚开始使用Androidtesting的人。 我将提供两个简单的示例来帮助您了解testing如何工作。 如果你在接下来的10分钟内继续下去,你将全部开始将你的testing添加到你自己的应用程序中。 我想你会感到惊讶是多么容易。 我当然是。

介绍Androidtesting

有两种不同types的testing,你会做。

  • 本地unit testing。 这些在JVM(Java虚拟机)上本地运行。 由于他们是本地的,他们很快。 您可以使用它们来testing只需要Java而不是Android API的代码部分。 (有时候你可以做一个假的API对象来testing本地的东西,这就是所谓的模拟,一个模拟的Context就是一个例子。
  • 仪器testing。 这些testing是在真实的设备上或在仿真器上运行的。 这使得它们比本地testing慢。 但是,它们更灵活,因为您可以使用完整的Android API。

创build一个新的项目,你会看到下面的默认文件夹。

在这里输入图像说明

一切已经在那里,等着你来创build你的testing。 这一切已经build立起来了!

如何创build本地unit testing

打开ExampleUnitTest显示的ExampleUnitTest文件。 它应该看起来像这样:

 public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { assertEquals(4, 2 + 2); } } 

按双绿色箭头运行所有testing或单个绿色箭头运行只有一个。 (在这种情况下,只有一个testing,所以他们都做同样的事情。)

在这里输入图像说明

它应该通过(当你正在阅读这个答案时,只要2 + 2仍然是4 )。 恭喜,你刚刚进行了第一次testing!

做自己的testing

我们来写我们自己的testing。 首先将这个类添加到你的主应用程序项目中,这样我们就可以testing一下了:

 public class MyClass { public int add(int a, int b) { return a + b; } } 

现在,将testing类中的addition_isCorrect()方法更改为下面的代码(或者添加另一个名称不同的方法):

 public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { MyClass myClass = new MyClass(); int result = myClass.add(2, 2); int expected = 4; assertEquals(expected, result); } } 

再次运行,你应该看到它通过。 恭喜,你刚刚创build了自己的第一个testing! (呃,我想从技术上来说这是我的,但是,嘿,够近了,我的是你的。)

如何创build仪表testing

打开ExampleInstrumentedTest文件。 它应该看起来像这样:

 @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals("com.example.myapp", appContext.getPackageName()); } } 

再次按下其中一个绿色button。

在这里输入图像说明

只要你有一个真正的设备连接或模拟器设置,它应该已经启动并运行你的应用程序。 恭喜,你刚刚进行了第一次仪器testing!

做自己的testing

仪器化的testing使用Espresso来运行testing。 它有点像你自己的小机器人用户,你可以testing你的应用程序。 你可以告诉它做类似按下button或阅读TextView的属性。

您可以手动编写关于如何进行testing的说明,但由于我们刚刚开始,所以我们使用自动loggingfunction 。 这非常简单。

首先添加一个button到您的用户界面,以便我们有一些工作。 我做到了这一点:

 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.myapp.MainActivity"> <Button android:id="@+id/myButton" android:text="Click me" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </android.support.constraint.ConstraintLayout> 

然后在菜单中按运行>logging咖啡testing

在这里输入图像说明

启动后,单击模拟器中的button,然后在“logging”对话框中select“确定”。 它应该自动生成以下testing代码。

 @LargeTest @RunWith(AndroidJUnit4.class) public class MainActivityTest { @Rule public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class); @Test public void mainActivityTest() { ViewInteraction appCompatButton = onView( allOf(withId(R.id.myButton), withText("Click me"), isDisplayed())); appCompatButton.perform(click()); } } 

大! 你刚刚创build了你第一次testing! 那太容易了。 您应该添加一个断言来使其成为一个真正的testing,但这对于logging器来说也是相当容易的。 观看这个video要深入一点。

进一步研究

我会先观看video,然后阅读文档。 这是非常有帮助的。 最后一个环节是一系列文章,涵盖了在selecttesting内容时需要思考的一些重要事项。

  • Androidtesting模式 (来自Android Developers的短video系列)
  • testing入门 (Android文档)
  • 通过TDD编码质量的三个步骤

截至目前(工作室0.61),保持适当的项目结构就足够了。 不需要像在Eclipse中一样创build单独的testing项目(见下文)。

测试结构

Android Studio不断发展,因此上述响应最终将不再适用。 对于当前版本的Android Studio 1.2.1.1,有一个很好的关于testing的教程:

http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-1/

看起来主要的变化之一是,在Android Studio中,testing应用程序被集成到应用程序项目中。

我不确定这是否有助于解决您的具体问题,但是我发现了一个使用Gradle项目进行testing的指南。 Android Gradle用户指南

我发现的最简单的方法是在我的以下博客文章中精简:

  1. 创build一个文件夹,您将在其中编写所有的unit testing(最好是com.example.app.tests)
  2. 创build一个新的testing类(最好是NameOfClassTestedTests,即BankAccountLoginActivityTests)
  3. 扩展InstrumentationTestCase
  4. 编写一个失败的unit testing,以确保我们成功configurationunit testing
  5. 请注意,unit testing方法名称必须以“test”(最好是testTestedMethodNameExpectedResult(),即testBankAccountValidationFailedShouldLogout())
  6. configuration您的项目进行unit testing:
  7. 打开“运行…”菜单并点击“编辑configuration”
  8. 点击+button
  9. selectAndroidtesting模板
  10. 为您的运行configurationinput一个名称(最好是“AppNametesting”)
  11. 在模块combobox中select您的应用程序
  12. select“All In Package”单选button(通常你会select这个选项,因为它会在你所有的testing类中运行所有的unit testing)
  13. 从步骤1填入testing包名(例如com.example.app.tests)
  14. select您想要运行testing的设备
  15. 应用并保存configuration
  16. 运行unit testing(并期望失败):
  17. 从运行菜单中select新build的testingconfiguration
  18. 单击运行并在输出控制台中读取结果

祝您好运,让您的代码更具可读性,可维护性和经过良好testing!

Android Studio一直是一个动人的目标,首先是开发者预览,现在正在testing。 项目中Test类的path在一段时间内已经改变,但是不pipe你使用什么版本的AS,path都是在.iml文件中声明的。 目前,在版本0.8.3中,您将在内部iml文件中find以下内容:

  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/groovy" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> 

.iml文件告诉你在哪里放置你的testing类。

从Android Studio 1.1开始,我们得到了编写unit testing(Roboelectric作品)的官方(实验)支持。

资料来源: https : //sites.google.com/a/android.com/tools/tech-docs/unit-testing-support

在gradle文件里面添加下面的lib

  androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) 

在androidTest目录下创build类HomeActivityTest,在运行testing之前,在string资源文件中添加flurry_api_key和sender_idstring,并更改失败和成功案例的值。

 @RunWith(AndroidJUnit4.class) public class HomeActivityTest { private static final String SENDER_ID = "abc"; private static final String RELEASE_FLURRY_API_KEY = "xyz"; @Test public void gcmRegistrationId_isCorrect() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); Assert.assertEquals(SENDER_ID, appContext.getString(R.string.sender_id)); } @Test public void flurryApiKey_isCorrect() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); Assert.assertEquals(RELEASE_FLURRY_API_KEY, appContext.getString(R.string.flurry_api_key)); } } 

Android Studio v.2.3.3

突出显示要testing的代码上下文,并使用热键: CTRL + SHIFT + T

使用对话界面来完成您的设置。

testing框架应该镜像您的项目包布局以获得最佳结果,但是您可以手动创build自定义testing,只要您具有正确的目录和构build设置即可。