Это собственно не проблема, а просто рабочая ситуации. Уверен, что она знакома многим из вас.
есть большое рабочее приложение. но время от времени клиенты просят добавить новые ВалРулы, которые делают проверку значений полей. В результате падают старые тесты, которые выполняют ДМЛ оперции с записью, ничего не зная о новых ВалРулам.
Мы не можем запретить БА внедрять новые ВалРулы - это все бизнес процессы.
Но как правильно организовать внедрение новых требований к записям?
Я вижу только один путь:
(1) объяснить проблему БА и попросить их предупреждать тебя каждый раз, когда они внедряют новый ВалРул.
(2) проверять каждый новый ВалРул на то может ли он сломать старые тесты, и по необходимости вносить правки во все старые тесты...
долгий путь, может у вас есть лучшие варианты?
Это собственно не проблема, а просто рабочая ситуации. Уверен, что она знакома многим из вас. есть большое рабочее приложение. но время от времени клиенты просят добавить новые ВалРулы, которые делают проверку значений полей. В результате падают старые тесты, которые выполняют ДМЛ оперции с записью, ничего не зная о новых ВалРулам. Мы не можем запретить БА внедрять новые ВалРулы - это все бизнес процессы. Но как правильно организовать внедрение новых требований к записям? Я вижу только один путь: (1) объяснить проблему БА и попросить их предупреждать тебя каждый раз, когда они внедряют новый ВалРул. (2) проверять каждый новый ВалРул на то может ли он сломать старые тесты, и по необходимости вносить правки во все старые тесты... долгий путь, может у вас есть лучшие варианты?
Ну у меня в частности это работает так. Каждой ночью запускаются тесты, а утром присходит в случае падения тестов разбор полетов.
Так же ты можешь мониторить создание чего-лтбо нового через метадату. И соответственно будешь в курсе происходящего еще до падения тестов.
Остальные пути существенно сложнее.
Ну у меня в частности это работает так. Каждой ночью запускаются тесты, а утром присходит в случае падения тестов разбор полетов. Так же ты можешь мониторить создание чего-лтбо нового через метадату. И соответственно будешь в курсе происходящего еще до падения тестов. Остальные пути существенно сложнее.
Wilder прав.
Чтобы избежать больших проблем нужно:
- запускать тесты по расписанию (CI/cron + salesforce-ant) с уведомлением о результатах;
- иметь единый класс для создания тестовых данных (DummyDataFactory), т.е. придется править код только в 1 месте;
- использовать View Setup Audit Trail, чтобы вычислить виновного, можно написать свою обертку над ним и тоже мониторить изменения.
Wilder прав. Чтобы избежать больших проблем нужно: - запускать тесты по расписанию (CI/cron + salesforce-ant) с уведомлением о результатах; - иметь единый класс для создания тестовых данных (DummyDataFactory), т.е. придется править код только в 1 месте; - использовать View Setup Audit Trail, чтобы вычислить виновного, можно написать свою обертку над ним и тоже мониторить изменения.
спасибо, это хорошие идеи
спасибо, это хорошие идеи
еще как вариант , можно заставить БА привязывать свои новые ВалРулы к определенному РТ(-ам), что вполне логично.
а при создании тестовых записей использовать специально созданный "тестовый" РТ, к которому не применяются никакие ВалРулы
еще как вариант , можно заставить БА привязывать свои новые ВалРулы к определенному РТ(-ам), что вполне логично. а при создании тестовых записей использовать специально созданный "тестовый" РТ, к которому не применяются никакие ВалРулы
ну, так что, нет возражений по поводу такой схемы:
(1) создается специальный рекорд тайп для использования только в тестах.
(2) все тестовые записи создаются под этим рекорд тайпом.
(3) во всех ВалРулах используется дополнительный кондишн: если НЕ тестовый рекорд тайп.
при таком раскладе БА могут делать с ВалРулами, что угодно.
единственно я еще не уверен полностью что если различные профайлы будут пускать тесты, то не будет ли у теста проблем с использованием тестового рекорд тайпа, ну вроде как у того профайла нет доступа к данному рекорд тайпу... тогда тест становится независимым от ВалРулов, но зависимым от запускающего юзера. но я не уверен, что такая проблема существует.
ну, так что, нет возражений по поводу такой схемы: (1) создается специальный рекорд тайп для использования только в тестах. (2) все тестовые записи создаются под этим рекорд тайпом. (3) во всех ВалРулах используется дополнительный кондишн: если НЕ тестовый рекорд тайп. при таком раскладе БА могут делать с ВалРулами, что угодно. единственно я еще не уверен полностью что если различные профайлы будут пускать тесты, то не будет ли у теста проблем с использованием тестового рекорд тайпа, ну вроде как у того профайла нет доступа к данному рекорд тайпу... тогда тест становится независимым от ВалРулов, но зависимым от запускающего юзера. но я не уверен, что такая проблема существует.
Это как минимум неправильно:
- теряется смысл тестов
- логика зависит от тестов
[quote="Den Brown"]ну, так что, нет возражений по поводу такой схемы: (1) создается специальный рекорд тайп для использования только в тестах.[/quote] Это как минимум неправильно: - теряется смысл тестов - логика зависит от тестов
Было у меня такое. БА на встречу идти не хотели. Приходилось тесты все время вручную править.
Было у меня такое. БА на встречу идти не хотели. Приходилось тесты все время вручную править.
я тоже так думал: тесты не воссоздают реальную ситуацию, реальную логику, а "варятся в собственном соку"
но тогда остается только вносить регулярные правки в тест-дата-фабрику...
[quote="Gres"]- теряется смысл тестов - логика зависит от тестов[/quote] я тоже так думал: тесты не воссоздают реальную ситуацию, реальную логику, а "варятся в собственном соку" но тогда остается только вносить регулярные правки в тест-дата-фабрику...
Правильно! Падают тесты => логика изменилась => проверяешь логику на валидность => либо адаптируешь тесты, либо ищешь ошибку в логике => тесты выполяют свою функцию
[quote="Den Brown"]но тогда остается только вносить регулярные правки в тест-дата-фабрику...[/quote] Правильно! Падают тесты => логика изменилась => проверяешь логику на валидность => либо адаптируешь тесты, либо ищешь ошибку в логике => тесты выполяют свою функцию