我如何在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:
- 为testing添加一个src / instrumentTest / java目录
- 在包com.example.myapplication.test中添加一个testing类(扩展ActivityTestCase)
- 启动一个虚拟设备
- 在命令行上(在MyApplicationProject / MyApplication目录中)使用命令“../gradlew connectedInstrumentTest”
这运行了我的testing,并将testing结果放在MyApplicationProject / MyApplication / build / reports / instrumentTests / connected。 我新来testingAndroid应用程序,但它似乎工作正常。
在IDE中,可以尝试运行相同的testing类。 你需要
- 更新build.gradle列出Maven Central作为回购
- 更新build.gradle添加JUnit 3.8作为一个instrumentTestCompile依赖例如instrumentTestCompile'junit:junit:3.8'
- 在“项目结构”中手动移动JUnit,使其成为依赖顺序中的第一个
但是,这会失败(运行testing时使用的类path缺lesstesting输出目录)。 不过,我不确定这会工作,不pipe我的理解是需要一个Android特定的testing运行器。
我会build议使用gradle.build文件。
-
为testing添加一个src / androidTest / java目录(就像Chris开始解释的那样)
-
打开gradle.build文件并在那里指定:
android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion sourceSets { androidTest { java.srcDirs = ['androidTest/java'] } } }
-
按下“与Gradle文件同步项目”(在顶部面板)。 你应该看到一个文件夹“java”(在“androidTest”内)是一个绿色。
-
现在您可以在那里创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用户指南
我发现的最简单的方法是在我的以下博客文章中精简:
- 创build一个文件夹,您将在其中编写所有的unit testing(最好是com.example.app.tests)
- 创build一个新的testing类(最好是NameOfClassTestedTests,即BankAccountLoginActivityTests)
- 扩展InstrumentationTestCase
- 编写一个失败的unit testing,以确保我们成功configurationunit testing
- 请注意,unit testing方法名称必须以“test”(最好是testTestedMethodNameExpectedResult(),即testBankAccountValidationFailedShouldLogout())
- configuration您的项目进行unit testing:
- 打开“运行…”菜单并点击“编辑configuration”
- 点击+button
- selectAndroidtesting模板
- 为您的运行configurationinput一个名称(最好是“AppNametesting”)
- 在模块combobox中select您的应用程序
- select“All In Package”单选button(通常你会select这个选项,因为它会在你所有的testing类中运行所有的unit testing)
- 从步骤1填入testing包名(例如com.example.app.tests)
- select您想要运行testing的设备
- 应用并保存configuration
- 运行unit testing(并期望失败):
- 从运行菜单中select新build的testingconfiguration
- 单击运行并在输出控制台中读取结果
祝您好运,让您的代码更具可读性,可维护性和经过良好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设置即可。
- Intellij(Android studio)成员variables前缀
- Android Studio 1.2.1.1 – 无法find样式“textViewStyle”
- 使用Android Studio构build未签名的APK文件
- findcom.google.android.gms:play-services-gcm:8.3.0,但是需要版本8.1.0
- Android Studio TransformException:错误:任务执行失败':app:transformClassesWithDexForDebug'
- java.lang.IllegalArgumentException:AppCompat不支持当前的主题function
- Eclipse或Android Studio XML编辑器中没有行号
- 如何解决java.util.zip.ZipException?
- Android Studio上是否有快捷方式将文本转换为大写?