安卓工作室说;“空测试套件”;对于AndroidTestCase
我创建了一个扩展AndroidTestCase的示例测试用例。当我运行测试用例时, 它错在说安卓工作室说;“空测试套件”;对于AndroidTestCase,android,junit,gradle,android-studio,Android,Junit,Gradle,Android Studio,我创建了一个扩展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.sui
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);
}
}
我刚刚开始学习测试Android应用程序,我一直在努力解决同样的问题。您需要为测试类提供默认构造函数,例如:
package nilzor.myapp.tests;
public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public NilzorSomeTest(){
super(ActivityYouWantToTest.class);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
包nilzor.myapp.tests;
公共类NilzorSomeTest扩展了ActivityUnitTestCase{
公共氮量计(){
超级(ActivityYouWantToTest.class);
}
@小测验
公共void testBlah(){
资产质量(1,1);
}
}
我们使用AndroidTestCase
类来定义我们正在测试特定于Android的组件。AndroidTestCase
的主要好处是,它使我们能够访问应用程序的资源,如字符串和布局等
AndroidTestCase
不要求覆盖默认构造函数,因为它不提供特定的活动
作为上下文
,而是提供了一个通用的,因此您仍然可以调用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
,因为我们需要访问应用程序的资源。我在Android Studio运行测试时遇到了这个错误。结果我把我的测试用例放错了文件夹。运行Gradle/Android Studio时,所有Android测试都应位于文件夹src/instrumentTest/java
中
编辑:在Gradle插件版本0.9或更高版本中,文件夹的正确名称是
androidTest
。()我的问题是,我有由android studio生成的默认构造函数,如下所示
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest(Class<NewsActivity> activityClass) {
super(activityClass);
}
}
android {
// Some stuff
defaultConfig {
// Some other stuff
//junit test
testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner"
//ui tests
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
public类SomeTest扩展了ActivityUnitTestCase{
公共SomeTest(类activityClass){
超级(活动类);
}
}
我不得不把它改成这个来解决这个问题
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest() {
super(ActivityYouWantToTest.class);
}
}
public类SomeTest扩展了ActivityUnitTestCase{
公共测试(){
超级(ActivityYouWantToTest.class);
}
}
本指南可能会有所帮助-
在最新等级(0.9+)上,测试应在androidTestdir下进行
同样在gradle.build中:
dependencies {
androidTestCompile 'junit:junit:4.+'
}
还可以将这些添加到defaultConfig{
testPackageName "test.java.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"
}我的测试用例中已经有了一个默认构造函数,但它仍然给了我错误“空测试套件”,并被困在“实例化测试…”上 尝试创建新的工作区,重置Android Studio,但没有成功 最后,关闭Android SDK和emulator
./adb kill-server
./adb start-server
我得到这个错误是因为我的一个测试方法在方法签名后没有包含“抛出异常”。可能会帮助某人,因为没有人提到它:
AndroidTestCase
子类中的方法必须是public
,并且名称以“test”开头
OP和答案都是正确的,但我错过了,得到了完全相同的错误。您是否在gradleConfig中配置了testRunner? 我们为不同的测试使用不同的TestRunner(以加快速度)
public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
public SomeTest(Class<NewsActivity> activityClass) {
super(activityClass);
}
}
android {
// Some stuff
defaultConfig {
// Some other stuff
//junit test
testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner"
//ui tests
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
}
如果我禁用其中一行,相应的测试也会报告“空测试套件”。我也遇到了同样的问题。我使用的是
TestInstrumentRunner“android.support.test.runner.AndroidJUnitRunner”
在我的defaultConfig{…}
中。我刚刚删除了这一行,现在它工作正常(IDE在构建时选择了正确的运行程序配置)
我希望这会对某些人有所帮助。我知道这个问题很老了,自从提出这个问题以来,开发工具已经发生了很大的变化 然而,我也有一个类似的问题(在AndroidStudio 2.1.1中),结果证明,这只是一条错误消息,具有误导性。对我来说,它说:
Test running started
Test running failed: Instrumentation run failed due to 'java.lang.IllegalStateException'
Empty test suite.
(注意:与原始问题的区别在于IllegalStateException与RuntimeException)
事实证明,这个IllegalStateException
实际上是在应用程序上下文的初始化中抛出的,这可以通过检查logcat输出看到。因此,没有运行任何测试方法,Android Studio编写了这个有点误导性的“空测试套件”错误
也就是说,“空测试套件”可能意味着它实际所说的内容(您没有声明任何测试方法,例如,因为您忘记用@test
对它们进行注释),但也可能意味着某些东西(如应用程序初始化代码中引发的运行时异常)阻止测试运行程序访问任何测试方法(这似乎是你的情况)
检查adb logcat并搜索
RuntimeException
s。这可能会找到问题的根本原因。我的测试用例中已经有了默认构造函数。是的,我也已经有了默认构造函数,并且这个错误不断发生。在哪里指定这是Android测试的强制文件结构?它是这实际上不是强制性的,它只是默认的文件夹结构。您可以在Android工具网站上阅读更多关于它的信息:。当我在上面写下答案时,我无法让测试在外部运行