JUNIT遇到问题An instrumention test runner is not specified

An instrumention test runner is not specified

单击“Android JUnit Test”运行后,出现“An instrumention test runner is not specified ”错误提示,如下:

android launch error
同时,在程序的console面板中会输出如下信息:
ERROR: Application does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner。
出现错误的原因可能是:AndroidManifest.xml配置错误。那么在AndroidManifest.xml到底需要配置哪些内容呢,下面一一为大家说明:

  1. 在<application>增加引用android.test.runner的声明,如下图所示:user-library
  2. 然后在<manifest>中增加instrumentation的信息说明,如下图所示:intrumentation-2
  3. 最后还需要增加uses-permission声明,如下图所示:uers-permession

根据自己的程序,在AndroidManifest.xml文件中配置上面的信息。如果上面的信息配置正确,鼠标右键单击工程,选择Run As/Run configurations,在Android JUnit Test选项中选择工程,将会看到下面这个界面:

check-instruemntation

在Instrumentation runner后的列表框选项中,我们看到android.test.InstrmentationTestRunner,并处于当前选择状态。如果这个没有选择框中没有任何选项,就说明AndroidManifest.xml配置有问题。

如果你确信自己的配置没有问题,而且上面的界面显示也没有任何问题,但是运行却出现下面这个错误提示:
no-test

这个提示出现的原因,在JUnit 的FAQ中有对这个错误的说明,这里我也不知道是不是这个原因导致的错误,JUnit FAQ中是这么说明的:

Why do I get the warning “AssertionFailedError: No tests found in XXX” when I run my test?
Make sure you have more or more method annotated(有注解的) with @Test.
For example:
@Test
public void testSomething() {}
这个错误在提示我们:当前的test runner没有任何Test。在我们的package中包含有不少的TestCase,一切也都是按照Android SDK中的设置来编写的代码,出现这个错误实在是莫名其妙,但是有一点可以说明的,当前这个单元测试有问题。

即使是Android SDK中的例子程序运行也存在这个问题,我运行ApiDemos/test中的JUnit测试单元,也一直存在这样那样的问题。在学习到了前面的这些知识后,按照Android SDK中的规范,自己写个JUnit测试程序,步骤如下:

首先,从InstrmentationRunner继承,实现我们的自己的Instrument
public class MoandroidTestRunner extends InstrumentationTestRunner
{
@Override
public TestSuite getAllTests()
{

}

@Override
public ClassLoader getLoader()
{
return MoandroidTestRunner.class.getClassLoader();
}
}

然后,将这个TestCase添加到TestSuite中,并将TestSuite返回到MoandroidTestRunner
public TestSuite getAllTests()
{
InstrumentationTestSuite suite = new InstrumentationTestSuite(this);
suite.addTestSuite(ForwardingTest.class);
return suite;

/*—更加简单的方法
return new TestSuiteBuilder(ApiDemosRunner.class)
.includeAllPackagesUnderHere()
.build();
*/
}

最后,按照前面说的步骤,配置AndroidManifest.xml文件

这里需要说明的,我们创建了自己的Instrumentation,在配置要将Instrumentation的android:name属性设置为我们自己的MoandroidTestRunner(别忘了还需要加上包名)。

instrumentation-3

按照上面的方法,创建JUnit测试单元后,分别在Eclipes中Dev Tool中Instrumentationadb shell am –w 命令启动,应该就可以看到测试运行了。看来这多的例子程序,实际上JUnit单元测试的核心就是:TestCase、TestSuite,无论Android SDK 再此基础上怎么扩展,只要我们能了解这个核心,所有的变化也就是锦上添花而已。

这里我将ApiDemos中的测试单元修改后,上传博客与大家分享,下载测试例子程序,主要修改说明如下:

  • 去掉了其自身包含的test子文件,在src/com/example/android/apis包下创建一个test子包,其包含所有的测试代码,如下图所示:ApiDemos-test
  • 手工修改配置文件AndroidManifest.xml

在Eclipes中选择工程,单击右键,在Run as/Debug as子菜单选项中选择Android JUnit Test,JUnit测试界面就会显示测试过程了。

补充说明

Android SDK的troubleshooting页面中也说明了一个可能出现的错误,原文如下:
If you are developing on Eclipse/ADT, you can add JUnit test classes to your application. However, you may get an error when trying to run such a class as a JUnit test:
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/ref/FinalReference

这个错误的主要原因是android.jar并没有完全包含Junit.* 类,只是包含了部分类,至于如何修改这个错误,还是到Android SDK 中去查看具体的办法吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值