169 похожих чатов

Здравствуйте. пишу unittests на busted. поведение одной функции, которую я

тестирую, зависит от переменной окружения. как во время прогона тестов поменять переменную окружения? или, там, mock-нуть её как-нибудь

13 ответов

9 просмотров

замени функцию получения глобальной переменной на свою... Если ты только луашку тестишь... С си библиотеками такое не прокатит

Roberto's-Ширгозиев Автор вопроса
UtoECat
замени функцию получения глобальной переменной на ...

спасибо. си для меня - это тёмный лес а чем менять? стабами? или, по-тупому, old_getenv = os.getenv; new_getenv = my_solution?

Roberto's-Ширгозиев Автор вопроса
UtoECat
можно и так.

так первое, или второе?

Roberto's Ширгозиев
так первое, или второе?

выбирай тот вариант, который применим в твоём случае. Второй вполне можно, если у тебя нет никакой нестандартной шляпы вроде реальной многопоточности, изоляции глобальных окружений между скриптами и прочего.

Отрефакторить код так, чтоб тестируемый функционал мог быть замокан :)

Roberto's-Ширгозиев Автор вопроса
Tallneck Hephaestus
Отрефакторить код так, чтоб тестируемый функционал...

да в том-то и дело, что единственное, что делает функция - плюётся в stdout, собирая вывод из неизменяемого массива

Roberto's-Ширгозиев Автор вопроса
Roberto's Ширгозиев
да в том-то и дело, что единственное, что делает ф...

а если установлена определённая переменная окружения, то поднимает исключение

Roberto's-Ширгозиев Автор вопроса
UtoECat
пытался хоть понять где и почему?

возможно, я не так выразился. тестируемая функция должна поднимать исключение, если определённая переменная окружения имеет некоторое значение. то есть, в 1 случае она пишет в stdin а в другой - поднимает исключение. чтобы покрыть все 2 сценария использования, я ищу / искал способ изменить / симулировать изменение этой переменной окружения

Roberto's-Ширгозиев Автор вопроса
Roberto's Ширгозиев
возможно, я не так выразился. тестируемая функция ...

т.е. function() if certain_circumstance error(error_msg) end -- some more stuff end

Roberto's Ширгозиев
возможно, я не так выразился. тестируемая функция ...

интересное конечно у тебя использование переменных окружения.... Ну та ладно... Просто замени os.getenv на то, шо тебе надо, может даже на что-то такое : local myenv = { IMPORTANT=1 } function os.getenv(name) return myenv[name] end

Roberto's-Ширгозиев Автор вопроса
UtoECat
интересное конечно у тебя использование переменных...

я читаю os.getenv("NO_COLOR") и пинаю tput на linux. если цвета разрешены и терминал поддерживает их, подбираю количество доступных цветов. на виндоус всегда возвращаю 16, проверяя разделитель файлов в path (если \, то жто виндоус, и она всегда поддерживает цвета ascii sequences - если документация не врёт далее, если цвета разрешены, то выплёвываю в консоль примеры всех цветов. если цвета запрещены, то error("colors not available") или что-то такое

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
12
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Вопрос. Запускаю сонсольное приложение. Читаю из пайпа его вывод. Если данных нет, то на чтении поток зависает. Отправляю в вывод чучуть текста - нифига. Отправляю ещё чучуть...
Serjone
11
Карта сайта