Android - InstrumentationTestRunner

时间:2012-01-07 15:19:32

标签: android

我是Android新手,在Java上有点生疏,来自.NET背景。我正在为在Android上运行的移动应用程序开发一些测试自动化。

目前,我只是使用Android Debug Bridge通过命令行启动测试,但是当我尝试运行任何测试时出现错误:

首先,这是我收到的错误:

  

junit.framework.TestSuite $ 1:   警告失败:   junit.framework.AssertionFailedError:未找到任何测试   com.myapp.test.UITests           在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)           在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)           在android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)           在android.app.Instrumentation $ InstrumentationThread.run(Instrumentation.java:1448)

我正在使用此adb命令尝试启动测试(在root设备上):

  

adb shell am instrument -e class com.myapp.test.UITests -w com.myapp.test / android.test.InstrumentationTestRunner

最后,这是我试图从以下位置运行测试的类:

package com.myapp.test;

import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import com.jayway.android.robotium.solo.Solo;
import junit.framework.Assert;

@SuppressWarnings("unchecked")
public class UITests extends ActivityInstrumentationTestCase2
{
    private static final String TARGET_PACKAGE_ID = "com.myapp.main";
    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.myapp.main.activities.MainActivity";
    private static Class<?> launcherActivityClass;

    private Solo solo;
    private Activity activity;

    static 
    {
        try
        {
            launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
        }
        catch(ClassNotFoundException e)
        {
            throw new RuntimeException(e);
        }
    }

    public UITests() throws ClassNotFoundException
    {
        super(TARGET_PACKAGE_ID, launcherActivityClass);
    }

    @Override
    protected void setUp()
    {
        activity = getActivity();
        solo = new Solo(getInstrumentation(), activity);

    }

    @Override
    public void runTest() throws Throwable
    {
        // Simple Test
        Assert.assertTrue(solo.searchText("Welcome"));
    }

    @Override
    protected void tearDown() throws Exception
    {
        try
        {
            solo.finalize();
        }
        catch(Throwable e)
        {
        }
        getActivity().finish();
        super.tearDown();
    }

}

我一定是做错了,但我不确定是什么。我的代码基于我在Robotium网站上找到的example

如果有人能指出我的错误,我将不胜感激。

更新 - 按要求添加清单文件

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.myapp.test"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk android:minSdkVersion="3" />

    <application android:icon="@drawable/icon" android:label="@string/ws_app_name">
        <uses-library android:name="android.test.runner" />
    </application>

    <instrumentation android:name="android.test.InstrumentationTestRunner"
                     android:targetPackage="com.myapp.main"
                     android:label="My App Tests"/>
</manifest>

3 个答案:

答案 0 :(得分:21)

我设法解决了这个问题,我没有意识到每个测试函数名称都必须以'{'}开头,如here所示。

答案 1 :(得分:0)

所有测试方法名称都应以测试开始(区分大小写)。

示例:

public void testMethod1(){
/..
../
}

答案 2 :(得分:0)

通过将文件/项目设置/风味/ 测试仪器运行器 设置为android.support.test.runner.AndroidJUnitRunner

,我解决了这个问题