Проблемы с Workmanager в roboelectric - PullRequest
0 голосов
/ 26 мая 2020

Я использую настраиваемый workmanager в своем приложении и отключил инициализацию workmanager по умолчанию. но когда я тестирую тест записи с помощью roboelectri c. Это вызывает ошибку sh во втором тесте. вот мои тестовые примеры.

@Before
    fun initDb() {
        val context = InstrumentationRegistry.getInstrumentation().context
        val config = Configuration.Builder()
            // Set log level to Log.DEBUG to make it easier to debug
            .setMinimumLoggingLevel(Log.DEBUG)
            // Use a SynchronousExecutor here to make it easier to write tests
            .setExecutor(SynchronousExecutor())
            .build()

        // Initialize WorkManager for instrumentation tests.
        WorkManagerTestInitHelper.initializeTestWorkManager(context, config)

        currencyDatabase = Room.inMemoryDatabaseBuilder(
            InstrumentationRegistry.getInstrumentation().targetContext, CurrencyDatabase::class.java
        )
            .setTransactionExecutor(Executors.newSingleThreadExecutor())
            .setQueryExecutor(Executors.newSingleThreadExecutor())
            .build()

        System.out.println("FUCK")

        currencyDao = currencyDatabase.currencyDao()

        timestampDao = currencyDatabase.timestampDao()

        localRepository = LocalRepository(currencyDao, timestampDao)
    }

    @Test
    fun insertCurrency() {
        val currency = Currency(
            flag = 1211, exchangeRate = "1200", currencyName = "Dollar", timestamp = "1137187182192", shortName = "USD"
        )
        val currency1 = Currency(
            flag = 1211, exchangeRate = "1200", currencyName = "Dollar", timestamp = "1137187182192", shortName = "USD"
        )
        testCoroutineScope.launch {
            try {
                localRepository.saveCurrency(currency)
                localRepository.saveCurrency(currency1)

                val testObserver: Observer<List<Currency>> = mock()
                currencyDao.getCurrency().observeForever(testObserver)

                val listClass = ArrayList::class.java as Class<ArrayList<Currency>>
                val argumentCaptor = ArgumentCaptor.forClass(listClass)
                // 4
                verify(testObserver).onChanged(argumentCaptor.capture())
                // 5
                val capturedArgument = argumentCaptor.value
                Log.w("SHIT :: ", capturedArgument.toString())
                System.out.println(capturedArgument.toString())
                assertTrue(capturedArgument.containsAll(listOf(currency, currency1)))
            } catch(e: Exception) {
                System.out.println("FUCK :: " + e.toString())
            }
        }
    }

    @Test
    fun insertTimestamp() {
        val timestamp = Timestamp(timestamp = "23242424242")

        testCoroutineScope.launch {
            try {
                localRepository.saveTimestamp(timestamp)

                val timestampObserver: Observer<List<Timestamp>> = mock()
                localRepository.getTimestamp().observeForever(timestampObserver)

                val listClass = ArrayList::class.java as Class<ArrayList<Timestamp>>
                val argumentCaptor = ArgumentCaptor.forClass(listClass)

                verify(timestampObserver).onChanged(argumentCaptor.capture())

                val capturedArgument = argumentCaptor.value

                System.out.println(capturedArgument[0].timestamp + " :: ")

                assertTrue(capturedArgument[0].timestamp == timestamp.timestamp)
            } catch (e: Exception) {
                System.out.println(e.toString())
            }
        }
    }

    @After
    fun closeDb() {
        currencyDatabase.close()
    }

это моя индивидуальная инициализация workmanager.

WorkManager.initialize(this, Configuration.Builder().setWorkerFactory(myWorkerFactory).build())

Что не так с инициализацией?

вот ошибка, которую я получил во втором тесте. java.lang.IllegalStateException: WorkManager is already initialized. Did you try to initialize it manually without disabling WorkManagerInitializer? See WorkManager#initialize(Context, Configuration) or the class level Javadoc for more information.

пожалуйста, помогите мне с этим

...