|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
|
Написание unit test21.11.2016, 10:35. Показов 1889. Ответов 15
Метки нет (Все метки)
Разбираюсь с написанием unit test. Вот что не могу понять. В примерах, сами тесты встраивают в само приложение и при запуске приложение тестирует само себя. Но ведь это излишняя растрата памяти и размера бинарника. Ведь по мимо тестов должен же быть и боевой режим. Или я чего то не понял ?
Как правильно должны быть архитектурно созданы автоматические тесты ?
0
|
|
| 21.11.2016, 10:35 | |
|
Ответы с готовыми решениями:
15
Написание unit test на nunit, который вернет объект Что такое unit test и regression test Unit Test |
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
|
| 23.11.2016, 04:09 [ТС] | |
|
т.е. пишутся два приложения (основное и тестирование) одновременно, с дублями инициализаций и загрузок из базы (если требуются), а потом на основе этого делаются тесты?
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 23.11.2016, 04:22 | ||
|
1
|
||
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
||
| 24.11.2016, 11:29 [ТС] | ||
|
0x10, Спасибо за подсказку о mock object. Интересная идея.
Добавлено через 7 часов 22 минуты Данный метод использует несколько других классов (работа с конфигом, работа с базой, работа с вызовом методов из другой dll (плагин)), как такое тестировать ? Элементарно, как подделать работу класса, например работы с конфигом ? Ведь его вызов осуществляется не проверяющим тестом, а из тестируемого метода. И тестируемый метод ничего о том, тестирует его или нет не знает.
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 24.11.2016, 12:09 | ||
|
Для управления сложностью инициализации можно использовать какой-нибудь IoC-контейнер, например: https://github.com/ybainier/Hypodermic
0
|
||
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
||
| 25.11.2016, 03:21 [ТС] | ||
|
про mock я читал, и прекрасно понимаю, что если бы было именно так "В простейшем случае тестируемый класс в конструкторе принимает зависимости по интерфейсам", то можно было бы использовать как раз их. С этим как раз вроде как всё понятно.
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 25.11.2016, 04:16 | ||
|
0
|
||
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
|||||||||||
| 29.11.2016, 09:00 [ТС] | |||||||||||
|
т.е. из одного метода создавать куча дополнительных классов и методов, которые будут создавать окружение для реального метода ? Опять же существуют, например, вызов статических методов.
В итоге получается что код который нужно тестирований разбухнет и потребует тестирований классов для поддержки тестирований. Или я чего то не понимаю. например, есть класс
каким образом тестировать method ?
0
|
|||||||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||
| 30.11.2016, 07:29 | |||
|
Конфликт здесь понятен. Приемы выше — подмена реализации во время выполнения. Подмена вызова статик метода может быть выполнена только на этапе компиляции. Для этого можно тестируемый класс/метод сделать шаблонным. Параметр шаблона — тип статического класса. Другой вариант — можно вынести реализацию статического класса в отдельный файл и написать тестовую реализацию в другом файле. Первый файл включать в боевую сборку, другой — в тестовую. Ни первый, ни второй способ не считаю подходящим. Использование шаблонов в принципе кажется неуместным для такой цели, да и есть теоретическая вероятность упереться в специализацию шаблона. Разный состав сборки — тоже лишние заморочки. Резюме такое. Не всякий код удобно покрывать юнит-тестами. Не всякий код можно покрыть юнит-тестами. Есть несколько вариантов решения проблемы. Первый — отрефакторить существующий код. Вынести все зависимости, добавить точек гибкости. Второй — сказать, что рефакторить слишком дорого и забить на юнит-тесты. Писать интеграционные, которые будут сами поднимать базу, готовить данные, посылать запросы в приложение и проверять результат в базе. «Посылать запросы» можно по-разному: http, rpc или эмуляцией кликов в интерфейс, в зависимости от типа приложения. Если получается оторвать интерфейс и тестировать библиотеку, то можно как обычно звать функции из кода. Но от поднятия БД и подготовки данных все равно не уйти. Третий — забить на автоматические тесты, проверять работоспособность вручную. В некоторых ситуациях это нормальное решение.
0
|
|||
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
|||
| 30.11.2016, 18:09 [ТС] | |||
|
0
|
|||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 01.12.2016, 06:58 | |
|
Если задача — познакомиться с библиотекой для написания юнит-тестов и понять, как собирать проект, то проще написать небольшой проект с нуля, чем рефакторить существующее легаси.
0
|
|
|
Модератор
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
|
||
| 05.12.2016, 15:01 | ||
|
0
|
||
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
||
| 06.12.2016, 11:47 [ТС] | ||
|
0
|
||
|
Модератор
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
|
|
| 06.12.2016, 12:00 | |
|
Желательно, чтобы каждый тест проверял что-то одно.
Тест для сортировки должен проверять правильность сортировки. Тест для "метода которые берет из extern массива данные сортирует и выдает сортированный массив" должен проверять, вызывался ли метод сортировки и не должен проверять правильность сортировки. Поэтому этот тест вместо обращения к "настоящим" методам должен использовать обращения к фиктивным методам.
0
|
|
|
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
|
|
| 07.12.2016, 03:15 [ТС] | |
|
Shamil1, тестом я хотел бы проверить правильность работы с массивом, например правильно ли он регистрирует ошибки (например, наличие/отсутствие какого либо элемента), правильно ли забирает данные (со всех ли источников), правильно ли выдает данные (например, только 5 первых элементов массива).
0
|
|
| 07.12.2016, 03:15 | |
|
Помогаю со студенческими работами здесь
16
Unit Test
Unit Test Asserts Unit-test Python Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|