Код: Выделить всё
@OptIn(ExperimentalCoroutinesApi::class)
@ExtendWith(MainCoroutineExtension::class)
class DetailViewModelTest {
private lateinit var viewModel: DetailViewModel
private lateinit var getForecastUseCase: GetForecastUseCase
private lateinit var savedStateHandle: SavedStateHandle
@BeforeEach
fun setUp() {
getForecastUseCase = mockk(relaxed = true)
savedStateHandle = SavedStateHandle()
viewModel = DetailViewModel(getForecastUseCase, savedStateHandle)
}
@Test
fun `given viewModel when initialized then forecastState should be Loading`() = runTest {
assertThat(viewModel.forecastState.value).isEqualTo(ForecastState.Loading)
}
@Test
fun `given savedStateHandle with null values when fetching forecast then state should remain Loading`() =
runTest {
savedStateHandle[DetailViewModel.LATITUDE_ARG] = null
savedStateHandle[DetailViewModel.LONGITUDE_ARG] = null
every { getForecastUseCase.execute(any(), any()) } returns flowOf(dummyForecast)
viewModel.forecastState.test {
val firstItem = awaitItem()
assertThat(firstItem).isEqualTo(ForecastState.Loading)
expectNoEvents()
}
}
}
< /code>
GetForecastUseCaseКод: Выделить всё
class GetForecastUseCase @Inject constructor(
private val repository: WeatherForecastRepository
) {
fun execute(
lat: String,
long: String
): Flow = repository.getLocationForecast(lat, long)
}
< /code>
(on CI)
Here, first test always succeeds but the second one (which contains mocking operations) always fails with exception :
java.lang.NullPointerException: Cannot invoke
"com.sevban.data.repository.WeatherForecastRepository.getLocationForecast(String,
String)" because "this.repository" is null ...
As you can see its complaining about this.repository being null but the thing is I'm not mocking any repository, I'm only mocking the GetForecastUseCaseЧто я попробовал? ul>
Я проводил повторные тесты тысячи раз, чтобы увидеть, являются ли они Flakky Tests или нет, но они никогда не провалились в моей местной машине. < /p>
< /li> Также я много раз чищал свой кэш Gradle & Android Studio, но они все еще преуспели в локальном, не провалившись в Интернете. < /p>
< /li>
< /ul>
Есть ли какие -либо предложения, которые можно попробовать или это должно быть связано с проблемой о Bitrise? Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/794 ... e-in-local
Мобильная версия