Java 在Robolectric上运行第一个测试时出现问题

Java 在Robolectric上运行第一个测试时出现问题,java,android,robolectric,Java,Android,Robolectric,奇怪的行为。我现在正在设置机器人分子 以下是我的设置: build.app dependencies { testImplementation 'org.robolectric:robolectric:4.0-alpha-3-SNAPSHOT' } 及 构建项目 repositories { maven { url "https://oss.sonatype.org/content/repositories/snapshots" } } 这就是我的活动 @RunWith(R

奇怪的行为。我现在正在设置
机器人分子

以下是我的设置:

build.app

dependencies {
    testImplementation 'org.robolectric:robolectric:4.0-alpha-3-SNAPSHOT'
}

构建项目

repositories {
     maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
这就是我的活动

@RunWith(RobolectricTestRunner.class)

public class RootActivityTest {
private RootActivity activity;

@Before
public void setup()  {
    activity = Robolectric.buildActivity(RootActivity.class)
            .create()
            .resume()
            .get();
}

@Test
public void checkActivityNotNull() throws Exception {
    assertNotNull(activity);
}
}
现在,当我使用此配置运行测试时,出现以下错误:

java.lang.RuntimeException:多索引安装失败(/tmp/roblectric-Method\u checkActivityNotNull62942157800013113020/com.mandarine.android-sourceDir(是一个目录))

已尝试实现以下库之一:

testImplementation "org.robolectric:multidex:3.4.2"


但是没有帮助。

也许有人会有用。你也可以从这里开始

我的经验是如何使用Robolectric运行测试:

建筑等级

testImplementation 'org.robolectric:robolectric:3.8'

testOptions {
    unitTests {
        includeAndroidResources = true
    }
}
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)

public class MainActivityTest {

@Test
public void shouldNotBeNull() throws Exception {
    MainActivity activity = Robolectric.setupActivity(MainActivity.class);
    assertNotNull(activity);
}
}
android.enableAapt2=false
这是我的主要活动:

testImplementation 'org.robolectric:robolectric:3.8'

testOptions {
    unitTests {
        includeAndroidResources = true
    }
}
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)

public class MainActivityTest {

@Test
public void shouldNotBeNull() throws Exception {
    MainActivity activity = Robolectric.setupActivity(MainActivity.class);
    assertNotNull(activity);
}
}
android.enableAapt2=false
最后一个技巧是,添加gradle.properties

testImplementation 'org.robolectric:robolectric:3.8'

testOptions {
    unitTests {
        includeAndroidResources = true
    }
}
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)

public class MainActivityTest {

@Test
public void shouldNotBeNull() throws Exception {
    MainActivity activity = Robolectric.setupActivity(MainActivity.class);
    assertNotNull(activity);
}
}
android.enableAapt2=false

为什么要实现两个版本?@TheLower更新了问题,请检查。@NileSharthod thx有关链接,我按照脚本进行操作,但由于我仍然无法运行简单的测试,因此出现了新的问题。所以更新了这个问题,但是你的链接在这件事上会很有帮助。在没有禁用AAPT2的情况下,在相同的设置和这些库中工作吗?能戒掉这种瘾就太好了-
aapt2
我想是的。我们不使用来自robolectric的multidex,但它与aapt2的变化不大