我创建了一个扩展AndroidTestCase的示例测试用例。当我运行测试用例时,它错误地说
Running tests
Test running startedTest running failed:
Instrumentation run failed due to 'java.lang.RuntimeException'
Empty test suite.
测试用例
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import static org.junit.Assert.assertEquals;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.lang.Exception;
import java.lang.Override;
public class DateFormatTest extends AndroidTestCase{
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public DateFormatTest(){
super(DateFormatTest.class);
}
@SmallTest
public void testMultiply() {
assertEquals("10 x 5 must be 50", 50, 10*5);
}
}
由于没有其他人提到它:AndroidTestCase
子类中的方法需要public
并且名称以"test"开头!
OP 和答案都做对了,但我错过了它并得到了完全相同的错误。
我在从 Android Studio 运行测试时收到此错误。原来我把测试用例放在了错误的文件夹中。运行 Gradle/Android Studio 时,所有 Android 测试都应位于文件夹 src/instrumentTest/java
中。
编辑:在 Gradle 插件版本 0.9 或更高版本中,文件夹的正确名称是 androidTest
。(http://tools.android.com/tech-docs/new-build-system/migrating_to_09)
这个问题已经过时了,自从提出这个问题以来,开发工具已经发生了重大变化。
但是,我遇到了类似的问题(在AndroidStudio 2.1.1中),事实证明这只是误导性的错误消息。对我来说,它说:
Test running started
Test running failed: Instrumentation run failed due to 'java.lang.IllegalStateException'
Empty test suite.
(注意:与原始问题的区别在于 IllegalStateException vs. RuntimeException)
事实证明,这个IllegalStateException
实际上是在应用程序上下文的初始化中抛出的,这可以通过检查 logcat 输出来看到。结果,没有运行任何测试方法,Android Studio编写了这个有点误导性的"空测试套件"错误。
即"空测试套件"可以表示它实际所说的内容(您没有声明任何测试方法,例如,因为您忘记用@Test
注释它们),但它也可能意味着某些东西(例如应用程序初始化代码中抛出的运行时异常)阻止测试运行器访问任何测试方法(似乎是您的情况)。
检查 adb-logcat 并搜索 RuntimeException
s。这可能会找到问题的根本原因。
我收到此错误是因为我的一个测试方法在方法签名后不包括"抛出异常"。 可能会帮助某人
我遇到了同样的问题。我在defaultConfig {...}
里有testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
.我刚刚删除了该行,现在它工作正常(IDE 在构建时选择正确的运行器配置)。
我希望这会帮助某人。
我的问题是我有安卓工作室生成的默认构造函数,看起来像这样
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest(Class<NewsActivity> activityClass) {
super(activityClass);
}
}
我不得不将其更改为此以摆脱问题
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest() {
super(ActivityYouWantToTest.class);
}
}
我们使用AndroidTestCase
类来定义我们正在测试特定于Android的组件。AndroidTestCase
的主要好处是它使我们能够访问应用程序的资源,例如字符串和布局等。
该AndroidTestCase
不需要您覆盖默认构造函数,因为它不提供特定Activity
作为Context
,而是为您提供一个通用的构造函数,因此您仍然可以调用getContext()
。
在您的示例中,您没有使用任何 Android 组件,因此对您来说,以下内容是有意义的:
import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.TestCase;
public class DateFormatTest2 extends TestCase {
@SmallTest
public void testMultiply() {
assertEquals("10 x 5 must be 50", 50, 10 * 5);
}
}
请注意使用 TestCase
而不是 AndroidTestCase
。
要使AndroidTestCase
适用,需要资源的测试是必要的:
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
public class DateFormatTest extends AndroidTestCase {
@SmallTest
public void testAppTitle() {
assertEquals("MyApp", getContext().getResources().getString(R.string.app_name));
}
}
在这里我们使用AndroidTestCase
,因为我们需要访问应用程序的资源。
本指南可能会有所帮助 -http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio
在最新的 gradle (0.9+) 上,测试应该在 androidTest dir 下
同样在你的gradle.build中:
dependencies {
androidTestCompile 'junit:junit:4.+'
}
还要在默认配置 {
testPackageName "test.java.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
您是否在 gradleConfig 中配置了 testRunner?我们使用不同的测试运行器进行不同的测试(以加快速度。我的配置看起来像这样
android {
// Some stuff
defaultConfig {
// Some other stuff
//junit test
testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner"
//ui tests
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
如果我禁用其中一行,相应的测试也将报告"空测试套件"。
我刚刚开始学习测试Android应用程序,我一直在努力解决同样的问题。您需要为测试类提供默认构造函数,例如:
package nilzor.myapp.tests;
public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public NilzorSomeTest(){
super(ActivityYouWantToTest.class);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
我的测试用例中已经有一个默认构造函数,但它仍然给我错误"空测试套件"并卡在"实例化测试..."。
尝试创建新的工作区,重置Android Studio,但这不起作用。
最后,关闭安卓SDK和模拟器。
-
转到您的 android-sdks/platform-tools。
-
使用以下命令清除所有安卓临时文件:
一个。
rm -rf ~/Library/Application Support/AndroidStudio
二.
rm -rf ~/Library/Caches/AndroidStudio
三.
rm -rf ~/Library/Application Support/AndroidStudio
d.
rm -rf ~/Library/Preferences/AndroidStudio
-
跑:
./adb kill-server ./adb start-server
-
启动安卓并运行测试用例。