Не работает, ведь, потому, что плохо написано. А вы, как заказчик, на этапе разработки первой фичи можете позаботиться о том, чтобы ее было достаточно просто поддерживать и расширять. Хотя про «Сделай по-быстрому, а потом зарефакторим» уже написано много.
Первая фича может быть очень плохо написана и ломаться при малейшем дуновении. В таком случае интеграция второй фичи будет довольно трудоемким занятием. И кому-то за него прийдется платить.
Я обязательно еще ближе посмотрю на SpecFlow и NBehave. Сейчас у меня нет четкого понимания BDD и я не знаю BDD тесты должны быть модульными или интеграционными (возможно и то и то). Вопрос требует более глубокой проработки и я не хочу принимать опрометчивые решения.
В проекте сейчас мы пишем по большей части модульные тесты и мое решение было нацелено на то, чтобы сделать их читабельнее.
Да чего я вам объясняю очевидные проблемы велосипедов.
Как минимум чтобы я прочитал и еще раз задумался. И, возможно, не только я. Спасибо.
Усложнять это решение у меня нет намерения. Благодаря комментариям к статья я узнал больше о BDD фреймворках и способах решить задачу похожим образом. Тем более атрибуты называются так же и если вдруг понадобиться более сложная функциональность перейти на SpecFlow, например не составит труда.
Я надеюсь что и другие читатели нашли для себя что-то полезное, так что, думаю, что статья вполне имеет место быть.
Вот вы же предложили распространить решение NuGet пакетом
Да, конечно. Для меня тесты в таком стиле читабельнее и удобнее. Без необходимости разбираться и работать с новыми фреймворками. Этот фактор может оказаться очень значимым в контексте проекта или команды.
И это уже проблема.
В чем вы видите проблему? Класс с минимальным количеством логики, который делает тесты понятнее. Да, я как раз и собираюсь использовать его в проекте. Для меня это сродни Extension методу для закрытого класса.
Я как раз и стараюсь создать и начать использовать DSL в проекте и двигаюсь в сторону DDD, но пока это все в зачаточном состоянии.
Чем плохи модульные тесты в BDD стиле?
При правильной организации модульных тестов given — в предыницализации теста, when — одна строчка, then — мясо теста.
Я так и написал, только не мясо а проверки (Assert).
Наверно у вас просто неправильные тесты — раз понадобился такой странный механизм.
Это неправильные пчелы и они дают неправильный мед
До этого использовал блок Arrange, в котором подготавливал данные для тестирование, блок Act и блок Assert где проверял результат теста. Все это происходило в одном методе — тесте. И когда инициализация занимает больше 15 строк кода читать такой тест становится неудобно. Но чем такие тесты неправильны?
Да, выглядит интересно, но, наверное, сложно поддерживать. Если сценарий меняется нужно изменять названия строк в нескольких местах. А как с передачей объектов в качестве параметров? Хотя вряд ли тот, кто пишет спецификацию будет пытаться моделировать состояние объекта.
SpecFlow другой фреймворк и я его не пробовал. Мы используем NUnit в проекте и хочется использовать один фреймворк для тестов, тем более NUnit мне нравится. Плюс у Resharper нет нативной поддержки SpecFlow. Хотя NCrunch поддерживает его через интеграцию с NUnit, так что может и с Resharper будет работать. Стоит присмотреться? Чем он хорош?
Спасибо за ссылку. Посмотрел на NBehave — это довольно большой фреймворк с полноценной реализацией поведения, своим раннером и плюшками, интересно. У меня идея была использовать синтаксис NUnit, но вместо блоков Arrange, Act, Assert использовать методы, по названиям которых проще понять какое поведение моделируется.
Мы тоже используем MVC рядом c WebForms, но в одном проекте в студии. Трудностей не возникает, MVC маршрутизируется отдельно WebForms отдельно и друг другу практически не мешают. В некоторых случаях нужно рендерить MVC View внутри aspx странички с мастер страницей. Использую такой код:
MvcHelperFactory это свой класс который просто создает HtmlHelper. При таком подходе выполняется полноценный процесс обработки запроса движком MVC с байндингами моделей и т.п. В сети встречаются разные варианты решения, этот мне показался самым удобным.
А какой ноут? Я тоже присматриваюсь к тач-дисплеям. Lenovo Switch, вроде, ничего так, но дисплей 12'' маловато, думаю.
Как жизненно.
В проекте сейчас мы пишем по большей части модульные тесты и мое решение было нацелено на то, чтобы сделать их читабельнее.
Как минимум чтобы я прочитал и еще раз задумался. И, возможно, не только я. Спасибо.
Усложнять это решение у меня нет намерения. Благодаря комментариям к статья я узнал больше о BDD фреймворках и способах решить задачу похожим образом. Тем более атрибуты называются так же и если вдруг понадобиться более сложная функциональность перейти на SpecFlow, например не составит труда.
Я надеюсь что и другие читатели нашли для себя что-то полезное, так что, думаю, что статья вполне имеет место быть.
Да, конечно. Для меня тесты в таком стиле читабельнее и удобнее. Без необходимости разбираться и работать с новыми фреймворками. Этот фактор может оказаться очень значимым в контексте проекта или команды.
В чем вы видите проблему? Класс с минимальным количеством логики, который делает тесты понятнее. Да, я как раз и собираюсь использовать его в проекте. Для меня это сродни Extension методу для закрытого класса.
Да, конечно, я практически так и написал. Велосипеды создавать интересно ©
Чем плохи модульные тесты в BDD стиле?
Я так и написал, только не мясо а проверки (Assert).
До этого использовал блок Arrange, в котором подготавливал данные для тестирование, блок Act и блок Assert где проверял результат теста. Все это происходило в одном методе — тесте. И когда инициализация занимает больше 15 строк кода читать такой тест становится неудобно. Но чем такие тесты неправильны?
MvcHelperFactory это свой класс который просто создает HtmlHelper. При таком подходе выполняется полноценный процесс обработки запроса движком MVC с байндингами моделей и т.п. В сети встречаются разные варианты решения, этот мне показался самым удобным.