Почему этот тест инструментария Android вызывает активность onCreate дважды?

У меня есть этот тестовый класс:

class InspirationalQuoteInstrumentedTest { private lateinit var server: MockWebServer @Rule @JvmField val mActivityRule: ActivityTestRule<InspirationalQuoteActivity> = ActivityTestRule(InspirationalQuoteActivity::class.java) @Before fun setUp() { server = MockWebServer() server.start() Constants.BASE_URL = server.url("/").toString() } @After fun tearDown() { server.shutdown() } @Test fun ensureTheQuoteOfTheDayIsDisplayed() { println("Base URL: ${Constants.BASE_URL}") Log.e(TAG,"Base URL: ${Constants.BASE_URL}") val response200 = this::class.java.classLoader.getResource("200.json").readText() val jsonResponse = JSONObject(response200) val expectedQuote = jsonResponse .getJSONObject("contents") .getJSONArray("quotes") .getJSONObject(0) .getString("quote") server.enqueue(MockResponse() .setResponseCode(200) .setBody(response200)) val intent = Intent() mActivityRule.launchActivity(intent) onView(withId(R.id.inspirationalQuote)) .check(matches(withText(expectedQuote))) } companion object { val TAG = InspirationalQuoteInstrumentedTest::class.java.simpleName } } 

И у меня есть эта деятельность:

 class InspirationalQuoteActivity : AppCompatActivity() { private lateinit var quoteService: QuoteOfTheDayService private var quote: String = "" private var author: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_inspirational_quote) val textView = findViewById<TextView>(R.id.inspirationalQuote) as TextView val policy = StrictMode.ThreadPolicy.Builder().permitAll().build() StrictMode.setThreadPolicy(policy) textView.text = getQuoteOfTheDay() } private fun getQuoteOfTheDay(): String { quoteService = QuoteOfTheDayService() val qod = quoteService.getQuoteOfTheDay() val response = qod.execute() Log.e(TAG, "Response: $response") response?.let { quote = response.body()!!.contents.quotes[0].quote author = response.body()!!.contents.quotes[0].author } Log.e(TAG, "Expected Quote: $quote") return quote } companion object { private val TAG = InspirationalQuoteActivity::class.java.simpleName } } 

Когда я запускаю свой тест, getQuoteOfTheDay() запускается дважды. Что дает? Проблема в том, что я пытаюсь издеваться над вызовом api, который выглядит так, как будто он работает, ожидая ответа, однако есть еще один журнал, который я не уверен, откуда он. Для справки, здесь выставляется логкат

 Response: Response{protocol=http/1.1, code=200, message=OK, url=https://quotes.rest/qod} Expected Quote: Let us think the unthinkable, let us do the undoable, let us prepare to grapple with the ineffable itself, and see if we may not eff it after all. Response: Response{protocol=http/1.1, code=200, message=OK, url=http://localhost:37290/qod} Expected Quote: Winning is nice if you don't lose your integrity in the process. 

Как вы можете видеть, я ударил https://quotes.rest/qod один раз, а затем я ударил свой макетный сервер после этого.

    Я пропустил некоторые аргументы в конструкторе … До.

    изменения

     ActivityTestRule(InspirationalQuoteActivity::class.java) 

    в

     ActivityTestRule(InspirationalQuoteActivity::class.java, false, false) 

    сделал трюк.

    Вы запускаете свою деятельность с помощью намерения IntestRule IntentsTestRule<>(InspirationalQuoteActivity.class, false, true);

    Третий параметр – launchActivity , вы должны установить его как false