java.lang.IllegalStateException:#init连续两次被调用。确保在每次#init之后调用#release

时间:2019-04-06 14:54:18

标签: android-espresso

我需要为测试初始化​​两个活动。 我确实是这样:

@RunWith(AndroidJUnit4::class)
@SmallTest
class AddTraderActivityTest {

    @get:Rule
    var addTraderActivity: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)

    @get:Rule
    var traderActivity: IntentsTestRule<TradersActivity> = IntentsTestRule(TradersActivity::class.java)

    @Test
    fun toolBarHeight() {
        onView(withId(R.id.toolBar)).check(matches(withHeightResId(R.dimen.tool_bar_height)))
    }

但是当我运行测试时,我得到了错误:

Client not ready yet..
Started running tests

java.lang.IllegalStateException: #init was called twice in a row. Make sure to call #release after every #init
at androidx.test.espresso.intent.Checks.checkState(Checks.java:70)
at androidx.test.espresso.intent.Intents.internalInit(Intents.java:314)
at androidx.test.espresso.intent.Intents.init(Intents.java:136)
at androidx.test.espresso.intent.rule.IntentsTestRule.afterActivityLaunched(IntentsTestRule.java:57)
at androidx.test.rule.ActivityTestRule.launchActivity(ActivityTestRule.java:366)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:529)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:531)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:104)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:389)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879)

1 个答案:

答案 0 :(得分:1)

我会尝试切换到ActivityTestRule 并自己制作IntentsTestRule的魔力

@RunWith(AndroidJUnit4::class)
@SmallTest
class AddTraderActivityTest {

    @get:Rule
    var addTraderActivity: ActivityTestRule <AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)

    @get:Rule
    var traderActivity: ActivityTestRule <TradersActivity> = IntentsTestRule(TradersActivity::class.java)

    @Before
    fun setUp() {
        Intents.init()
    }

    @After
    fun cleanUp() {
        Intents.release()
    }
    ...