Я написал несколько тестов, чтобы компенсировать потери, но позже обнаружил, что эти тесты не были рассчитаны как покрытие — возможно, из-за всех лямбда-выражений в функциях Compose!В поисках потенциальных ответов я только что нашел эту тему, которая не очень помогла:
https://github.com/jacoco/jacoco/issues /1208
Вот ссылка на репозиторий моего приложения для Android:
https://github.com/mohsenoid/Rick-and-Morty
а вот отчет о покрытии кода:
https://app.codecov.io/gh/mohsenoid/Rick-and-Morty
если у вас есть потенциальное решение или вы хотите проверить:
[img]https://i.sstatic .net/2fieYVEM.png[/img]
===== Пример улучшения вопроса =====
У меня есть функция составного пользовательского интерфейса:
Код: Выделить всё
@VisibleForTesting
@Composable
fun EpisodeItem(
episode: Episode,
onEpisodeClicked: (Episode) -> Unit = {},
) {
Card(
modifier =
Modifier
.fillMaxWidth()
.clickable { onEpisodeClicked(episode) },
) {
Row(modifier = Modifier.height(80.dp)) {
Box(
modifier =
Modifier
.fillMaxHeight()
.width(100.dp)
.background(MaterialTheme.colorScheme.inverseOnSurface),
contentAlignment = Alignment.Center,
) {
Text(
text = episode.episode,
style = MaterialTheme.typography.titleLarge,
)
}
Column(
modifier =
Modifier
.fillMaxHeight()
.weight(1f)
.padding(8.dp),
) {
Text(
text = episode.airDate,
modifier = Modifier.fillMaxWidth(),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.labelMedium,
)
Spacer(modifier = Modifier.height(4.dp))
Text(
text = episode.name,
modifier =
Modifier
.fillMaxWidth(),
maxLines = 2,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.titleMedium,
)
}
}
}
}
Код: Выделить всё
@RunWith(RobolectricTestRunner::class)
class EpisodeScreenTest {
@get:Rule
val rule = createComposeRule()
@Test
fun `When content is EpisodeItem, Then it should display EpisodeItem name, airDate and episode`() {
// GIVEN
// WHEN
rule.setContent {
EpisodeItem(
episode =
createEpisode(
name = TEST_EPISODE_NAME,
airDate = TEST_EPISODE_AIR_DATE,
episode = TEST_EPISODE_EPISODE,
),
)
}
// THEN
rule.onNodeWithText(TEST_EPISODE_NAME).assertExists()
rule.onNodeWithText(TEST_EPISODE_AIR_DATE).assertExists()
rule.onNodeWithText(TEST_EPISODE_EPISODE).assertExists()
}
companion object {
private const val TEST_EPISODE_NAME = "Pilot"
private const val TEST_EPISODE_AIR_DATE = "December 2, 2013"
private const val TEST_EPISODE_EPISODE = "S01E01"
}
}
К вашему сведению, я подтвердил, что это не эффект Robolectric.
Подробнее здесь: https://stackoverflow.com/questions/786 ... even-after