Как устранить негативное влияние пользовательского интерфейса Compose на покрытие кода, даже после написания для него теAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как устранить негативное влияние пользовательского интерфейса Compose на покрытие кода, даже после написания для него те

Сообщение Anonymous »

Недавно я перенес свой любимый проект Android из пользовательского интерфейса View в Compose, и поначалу я был в восторге от всех функций @Compose и @Preview, но сразу заметил значительное снижение кода репозитория. Покрытие.
Я написал несколько тестов, чтобы компенсировать потери, но позже обнаружил, что эти тесты не были рассчитаны как покрытие — возможно, из-за всех лямбда-выражений в функциях 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»