如何在 AndroidStudio 中创建测试?

刚刚下载的 Android Studio 是基于 Intellij 的想法。

如何创建测试?

我注意到有一个创建测试模块的选项,但是这个选项似乎没有任何作用,只是用 src 创建了一个新项目

我还试着按下热键 CTRL + A lT + T,它允许在现有类上创建单元测试,但它似乎想把它放在当前项目中。当然,这对 TDD 没有帮助

这里有人有经验吗?

114554 次浏览

最主要的变化之一似乎是 Android Studio 将测试应用程序集成到应用程序项目中。

我不确定这是否对你的具体问题有帮助,但是我找到了一个关于如何使用 Gradle 项目进行测试的指南。 Android Gradle 用户指南

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

Android Gradle 插件用户指南之后,我能够通过在一个新创建的项目上执行以下步骤(我使用默认的‘ com.example.myapplication’包)在命令行上进行测试:

  1. 为测试添加一个 src/InstrentTest/java 目录
  2. Add a test class (extending ActivityTestCase) in the package com.example.myapplication.test
  3. 启动一个虚拟设备
  4. 在命令行上(在 MyApplicationProject/MyApplication 目录中)使用命令“ . ./gradlew connectedInstrumentTest”

这将运行我的测试,并将测试结果放置在 MyApplicationProject/MyApplication/build/reports/InstrentTest/connect 中。我刚开始测试 Android 应用程序,但它似乎工作得很好。

在 IDE 内部,可以尝试运行相同的测试类

  1. 更新 build.gradle 将 Maven Central 列为回购
  2. Update build.gradle add JUnit 3.8 as a instrumentTestCompile dependency e.g. instrumentTestCompile 'junit:junit:3.8'
  3. 在“项目结构”中,手动将 JUnit 移动到依赖顺序的第一位

但是这样做失败了(运行测试时使用的类路径缺少测试输出目录)。然而,我不确定这是否会起作用,因为我的理解是需要一个特定于 Android 的测试运行程序。

我建议使用 格拉德,建造文件。

  1. Add a Src/androidTest/java directory for the tests (Like 克里斯 starts to explain)

  2. 打开 格拉德,建造文件并在其中指定:

    android {
    
    
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    
    
    sourceSets {
    
    
    androidTest {
    java.srcDirs = ['androidTest/java']
    }
    }
    }
    
  3. Press "Sync Project with Gradle file" (at the top panel). You should see now a folder "java" (inside "androidTest") is a green color.

  4. Now You are able to create there any test files and execute they.

我认为 Rex St John 的 这篇文章对于 android 工作室的单元测试非常有用。


(来源: rexstjohn.com)

As of now (studio 0.61) maintaining proper project structure is enough. 不需要像 Eclipse 中那样创建单独的测试项目(参见下面)。

Tests structure

Android Studio 一直是一个移动的目标,最初是一个开发者预览版,现在正处于测试阶段。 项目中 Test 类的路径在此期间发生了更改,但无论您使用的 AS 版本如何,该路径都将在。Iml 文件。目前,在0.8.3版本中,您可以在内部 iml 文件中找到以下内容:

      <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 文件告诉您在哪里放置测试类。

到 Android Studio 1.1为止,我们已经得到了官方(实验性)对编写单元测试的支持(Roboelectric 也可以工作)。

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

Android Studio 不断发展,因此上面的回复最终将不再适用。对于当前版本的 Android Studio 1.2.1.1,有一个很好的关于测试的教程:

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

我发现最简单的方法是 我接下来的博客文章中的流线型:

  1. 创建一个文件夹,在其中编写所有单元测试(最好是 com.example.app.test)
  2. 创建一个新的测试类(最好是 NameOfClassTestedTest,即 BankAccountLoginActivityTest)
  3. 扩展 InstrumentationTestCase
  4. 编写一个失败的单元测试,以确保我们成功地配置了单元测试
  5. 注意,单元测试方法名称必须以单词“ test”开头(最好是 testTestedMethodNameExpectedResult () ,即 testBankAccountValidationFailledShouldLogout ())
  6. 为单元测试配置项目:
  7. 打开“运行...”菜单,单击“编辑配置”
  8. Click the + button
  9. 选择 Android 测试模板
  10. 输入运行配置的名称(最好是“ AppName 测试”)
  11. 在模块组合框中选择您的应用程序
  12. 选择“ All In Package”单选按钮(通常需要选择此选项,因为它运行所有测试类中的所有单元测试)
  13. 填写步骤1中的测试包名称(即 com.example.app.test)
  14. 选择要在其上运行测试的设备
  15. 应用并保存配置
  16. 运行单元测试(并预期失败) :
  17. Select your newly created Tests configuration from the Run menu
  18. 单击 Run 并在输出控制台中读取结果

祝你好运,让你的代码更具可读性、可维护性和经过良好测试!

在分级文件中添加下面的 lib

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

在 androidTest 目录中创建类 HomeActivityTest,在运行测试之前,在字符串资源文件中添加 flurry _ api _ key 和 sender _ id 字符串,并更改失败和成功案例的值。

@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 测试的人们的。我将提供两个简单的示例来帮助您了解测试是如何工作的。如果你在接下来的10分钟里坚持下去,你就可以开始将你的测试添加到你自己的应用程序中了。我想你会惊讶这有多容易。当然了。

Android 测试入门

There are two different types of tests that you will do.

  • 本地单元测试。它们在 JVM (Java 虚拟机)上本地运行。因为它们是本地的,所以速度很快。您可以使用它们来测试代码中只需要 Java 而不需要 Android API 的部分。(有时您可以创建一个假的 API 对象来在本地测试更多的东西。这叫做 嘲笑。模拟 Context就是一个例子。)
  • 仪器测试。这些测试是在真实设备或模拟器上运行的。这使得它们比本地测试更慢。但是,它们更加灵活,因为您可以使用完整的 Android API。

创建一个新项目,您将看到以下默认文件夹。

enter image description here

一切都已经在那里等待您创建测试。一切都已经设置好了!

如何创建本地单元测试

打开上图所示的 ExampleUnitTest文件,它应该是这样的:

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

Press the double green arrow to run all the tests or the single green arrow to run only one. (In this case there is only one test so they both do the same thing.)

enter image description here

它应该通过(只要 2 + 2仍然是 4当你读这个答案)。恭喜你,你刚完成了第一个测试!

自己做测试

Let's write our own test. First add this class to your main app project so that we have something to test:

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

现在将测试类中的 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);
}
}

再运行一次,你应该会看到它通过。恭喜你,你刚刚创建了你自己的第一个测试!(好吧,我猜严格来说是我的,但是,嘿,差不多了。我的就是你的。)

如何创建检测测试

打开 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());
}
}

再按一次绿色按钮。

enter image description here

As long as you have a real device connected or the emulator set up, it should have started it up and run your app. Congratulations, you just ran your first instrumented test!

自己做测试

检测的测试使用 浓咖啡来运行测试。这有点像你自己的小机器人用户,你可以测试你的应用程序。您可以让它执行一些操作,比如按下按钮或读取 TextView 的属性。

您可以编写关于如何手工进行测试的说明,但是因为我们才刚刚开始,所以让我们使用 自动记录功能自动记录功能。超级简单。

首先在 UI 中添加一个按钮,这样我们就可以使用它了:

<?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>

然后按菜单中的 运行 > 记录浓缩咖啡测试

enter image description here

启动后,单击模拟器中的按钮,然后在 Record 对话框中完成选择 OK。它应该自动生成以下测试代码。

@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());
}
}

太好了!您刚刚创建了您的第一个仪器化测试!这太简单了。您可能应该添加一个断言来使它成为一个真正的测试,但是这对于记录器来说也很容易做到。观看 这个视频深入一点。

进一步研究

我会先看视频,然后再看文档。这些都很有帮助。最后一个链接是一系列文章,这些文章涵盖了在选择测试内容时需要考虑的一些重要问题。

Android Studio v.2.3.3

Highlight the code context you want to test, and use the hotkey: CTRL+SHIFT+T

使用对话框界面完成安装。

测试框架应该镜像您的项目包布局以获得最佳结果,但是您可以手动创建自定义测试,前提是您有正确的目录和构建设置。