JUnit: тестирование нескольких значений с помощью одной и той же функции. Лучшая практикаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 JUnit: тестирование нескольких значений с помощью одной и той же функции. Лучшая практика

Сообщение Anonymous »

Скажем, у меня есть различные входные строки, которые передаются в одну и ту же функцию и возвращают выходные строки, которые сравниваются с ожидаемыми результатами. Например, точки необходимо преобразовать в тире и наоборот.

Код: Выделить всё

class SomeClassUnitTest {

private val someClass = SomeClass()

@Test
fun exampleTest_SomeInput_ReturnsCorrectOuput() {
val input = "..."
val output = someClass.someFunction(input)
val expected = "---"

assertEquals(expected, output)
}

@Test
fun exampleTest_SomeInput_ReturnsCorrectOuput() {
val input = "---"
val output = someClass.someFunction(input)
val expected = "..."

assertEquals(expected, output)
}

}
У меня есть пара вопросов о передовой практике и практичности другого способа структурирования этого модульного теста. Во-первых, если я тестирую одну и ту же функцию с похожими входными и выходными данными, я могу структурировать модульный тест, как в приведенном выше коде, или примерно так:

Код: Выделить всё

  @Test
fun exampleTest_SomeInputs_ReturnsCorrectOuputs() {
val input = listOf{ "...", "---" }
val output = listOf()
input.forEach { output += someClass.someFunction(input) }
val expected = listOf{ "---", "..." }

assertEquals(expected, output)
}
Но СЛЕДУЕТ ли мне строить тест вот так? Я полагаю, что это сделает класс модульного теста более кратким и читабельным, поэтому, если в SomeClass есть другие функции для тестирования, тест можно будет добавить в этот файл с другим списком значений для тестирования.
Я могу согласиться, если разрабатывать такой модульный тест неправильно. Мы теряем удобство имени тестовой функции, описывающего, почему модульный тест функции терпит неудачу. И я полагаю, что модульный тест можно перепроектировать, чтобы сообщить разработчику, какое конкретное значение не проходит тест. Что вы думаете?
Еще один аспект, который я хочу задать, касается эффективности модульного тестирования? Может ли более краткий модульный тест быть более производительным, чем отдельные тесты для каждого входного параметра?
Я знаю, что это не будет очевидно из приведенных мной примеров, так что, если функция примет немного времени, чтобы закончить? Я думаю, что весь список значений может быть инициирован асинхронно, и как только все ответы будут завершены, будет выполнено сравнение с ожидаемым результатом. Таким образом, метод модульного теста для отдельных входных данных как O(k*n) (где k — количество тестов, а n — время обработки) сводится к O(n ), которое теперь определяется самым длительным временем обработки списка значений.
Мне больше всего интересно, что сообщество обнаружило на собственном опыте. Я мог бы протестировать их самостоятельно, но меня беспокоит первый вопрос: «Должен ли я построить тест таким образом?» а второй — скорее бонус, поскольку в модульных тестах можно выполнять асинхронные операции.

Подробнее здесь: https://stackoverflow.com/questions/784 ... t-practice
Ответить

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

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

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

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

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