#unit-testing #junit #robolectric #android-studio-arctic-fox
Вопрос:
После обновления до Android Studio Arctic Fox v2020.3.1 я больше не могу извлекать контекст для модульного тестирования ApplicationProvider.getApplicationContext()
. Кроме того, шаблоны тоже больше не работают.
Раньше я использовал Robolectric runner, @RunWith(RobolectricTestRunner::class)
. После обновления Arctic Fox я получаю следующую ошибку:
Никаких исполняемых методов. Никаких приборов не зарегистрировано! Должен работать под регистрирующим оборудованием.
У меня есть модульный тест для проверки структуры URL-адресов.
@RunWith(RobolectricTestRunner::class) class UrlValidatorTest { private lateinit var urlConfiguration: UrlConfiguration @BeforeEach fun setup() { context = ApplicationProvider.getApplicationContext() val config = Configuration.Builder() // Use a SynchronousExecutor here to make it easier to write tests .setExecutor(SynchronousExecutor()) .build() // initialize WorkManager for instrumentation tests. WorkManagerTestInitHelper.initializeTestWorkManager(context, config) // initialize UrlConfiguration urlConfiguration = UrlConfiguration.Builder() .create() } private fun isUrlValid(url: String): Boolean { val urlParts: Listlt;Stringgt; = url.split("//") // confirm url structure val isUrlStructureValid = urlParts.size lt; 3 amp;amp; (urlParts[0].equals("http:", ignoreCase = true) || urlParts[0].equals("https:", ignoreCase = true)) return isUrlStructureValid amp;amp; Patterns.WEB_URL.matcher( url.lowercase(Locale.getDefault()) ).matches() } @Test fun validateAllRequestUrls_ReturnsTrue() { assertTrue(isUrlValid(urlConfiguration.trackExceptionUrl)) assertTrue(isUrlValid(urlConfiguration.signinUrl)) assertTrue(isUrlValid(urlConfiguration.signupUrl)) assertTrue(isUrlValid(urlConfiguration.trackNavigationFailure)) assertTrue(isUrlValid(urlConfiguration.trackNavigationSuccess)) } }
Раньше этот тест работал просто отлично. После обновлений Arctic Fox почти все мои модульные тесты начали давать сбои.
Вот мои зависимости:
testImplementation 'org.robolectric:robolectric:4.6.1' def junit = '1.1.3' implementation "androidx.test.ext:junit-ktx:$junit" androidTestImplementation "androidx.test.ext:junit:$junit" androidTestImplementation 'androidx.test:core:1.4.0' def jupiter = '5.8.1' testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiter" testImplementation "org.junit.jupiter:junit-jupiter-engine:$jupiter" testImplementation "org.junit.vintage:junit-vintage-engine:$jupiter" def mokito = '4.0.0' testImplementation "org.mockito:mockito-core:$mokito" testImplementation "org.mockito:mockito-inline:$mokito"
Комментарии:
1. Никто так и не пришел к ответу. Единственное решение, которое у меня есть, — это не использовать jupiter и продолжить использовать стандартный junit.