测试运行失败:测试运行未能完成。预计1次测试,收到0

时间:2012-07-24 22:05:42

标签: android junit robotium

尝试为我的应用启动JUnit测试(robotium)。

public class MainTest extends ActivityInstrumentationTestCase2<MainActivity> {
    private Solo solo;

    public MainTest() {
        super("nix.android.contact", MainActivity.class);// TODO Auto-generated constructor stub
    }

    protected void setUp() throws Exception {
        super.setUp();
        solo = new Solo(getInstrumentation(), getActivity());
    }

    public void AddContact() {
        solo.assertCurrentActivity("main", MainActivity.class);
    }
}

清单

 <instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="nix.android.contact" />

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

When I try run test, get in console:

 <instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="nix.android.contact" />

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

我尝试为其他应用程序(非常简单的应用程序)创建其他测试 - 工作。

由于

8 个答案:

答案 0 :(得分:5)

当我没有no-args构造函数时,我遇到了这个问题。

public class MainActivityTest extends
    ActivityInstrumentationTestCase2<MainActivity_> {

public MainActivityTest() {
    super(MainActivity_.class);
}
...

答案 1 :(得分:1)

问题出在您的电话

super("nix.android.contact", MainActivity.class);

在我的代码中我有

super("nix.android.contact", Class.forName("nix.android.contact.MainActivity"));

我也是这样做的,无需为ActivityInstrumentationTestCase 2命名Generic

public class TestApk extends ActivityInstrumentationTestCase2 {

    private static final String TARGET_PACKAGE_ID = "nix.android.contact";
    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "nix.android.contact.MainActivity";

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

    @SuppressWarnings("unchecked")
    public TestApk() throws ClassNotFoundException {
            super(TARGET_PACKAGE_ID, launcherActivityClass);
    }

答案 2 :(得分:0)

我有同样的错误消息。问题是我的测试方法名称需要以'test'开头。

例如:testMethod1()有效,method1Test()给出错误。

答案 3 :(得分:0)

检查您是否没有预测出测试的构造函数所依赖的方法,但是应用程序中没有任何内容 - logcat会抱怨应用程序包中缺少类或方法。

尝试卸载目标软件包,检查它是否未从备用构建中遗留下来(例如,如果您将Eclipse与Eclipse一起使用)。

答案 4 :(得分:0)

我遇到了这个错误,我修复了它从构造函数方法中删除参数,它是由Eclipse向导创建的:

public OptionsActivityTest( String name ) {

我只需要删除“String name”以使我的测试再次起作用。

答案 5 :(得分:0)

我在测试我的应用时遇到了同样的问题 有时它可以工作,但大多数时候测试失败并引发同样的错误。

  

测试未能完成。
  原因:&#39;测试运行未能完成。预计1次测试,收到0&#39;   检查设备logcat以获取详细信息

我在我的所有测试类中检查了测试名称,并且它在两个类中是相同的,我更改了测试名称,当我再次开始测试时它可以工作。

当我的设备与计算机断开连接时,它也可能出错。

答案 6 :(得分:0)

在Android 上运行检测测试时遇到了同样的问题(@ RunWith(AndroidJUnit4.class))。

我遇到以下错误:

Tests on Nexus_5X_API_26(AVD) - 8.0.0 failed: 
Test run failed to complete. Expected 156 tests, received 152

问题是其中一个测试类在标有 @BeforeClass 的方法中失败,因此没有为该特定类执行测试。此外,在 @BeforeClass 中抛出的异常在test-output / report中没有结束。这就是为什么很难找到“预期的N次测试,收到M ”错误信息的原因。

所以,如果你遇到同样的问题 - 检查你的@Before和@BeforeClass实现 - 可能是一个例外。希望这会有所帮助。

答案 7 :(得分:-2)

所有测试名称都应以前缀“test”开头。