tag:blogger.com,1999:blog-8596733192274108952.post7005759430444891361..comments2024-03-12T06:00:18.305+02:00Comments on Programming stuff: Что мне не нравится в XunitSergey Teplyakovhttp://www.blogger.com/profile/14300835272589262297noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-8596733192274108952.post-18946285774222384602017-01-12T12:14:19.477+02:002017-01-12T12:14:19.477+02:00По поводу комментариев, автор очень активно отвеча...По поводу комментариев, автор очень активно отвечает в slack чате.Anonymoushttps://www.blogger.com/profile/16474572525745696483noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-64297027902638554022016-08-30T18:36:17.346+03:002016-08-30T18:36:17.346+03:00На нынешней работе видимо давно в традиции заведен...На нынешней работе видимо давно в традиции заведено xUnit. До этого я пользовался NUnit. И вот с чем абсолютно согласен - отсутствие внятной документации. Приходится по крохам собирать с разных форумов. Anonymoushttps://www.blogger.com/profile/08260602610109331295noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-88693337793276577002016-05-09T13:21:18.381+03:002016-05-09T13:21:18.381+03:00А кто-нибудь пробовал Smart Unit Tests/IntelliTest...А кто-нибудь пробовал Smart Unit Tests/IntelliTest от Микрософт? Который в Ultimate и может сам генерировать тестовы классы?<br />Мне всегда нехватало возможности (в VS2010 была) кликнуть на методе и сгенерить шаблон теста из него.Melkhttps://www.blogger.com/profile/03035037410383464473noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-68040532209437052042016-05-04T19:05:47.285+03:002016-05-04T19:05:47.285+03:00По NUnit.
Через R# работает более менее, если тест...По NUnit.<br />Через R# работает более менее, если тестов не очень большое количество. На VS 2015 R# тест раннер стабильно зависает через некоторое время после старта 26 000 тестов (вернее одного теста с тест-кейс сорсом, который возвращает 26 000 вариантов). Поэтому, когда нужно такое кол-во тестов гонять перехожу на 2.6.4 и стандартный NUnit runner. Почему не 3.0 и стандартный runner? Потому что стандартный раннер под 3.0 только неудобная консоль без хорошей обратной связи. Которая еще по ощущениям работает заметно медленнее, чем тот же раннер R#, то есть проще на 2.6.4 в один поток прогнать, чем в несколько через console runner. Под 3.0 есть отдельный гуевый проект, но он настолько ужасен, что можно сказать, что его нет. Какой-то давно не обновлявшийся прототип.<br /><br />Также у NUnit уже вышла 3.2 версия, но ее никто не поддерживает, кроме, понятное дело, консольного раннера.<br />Александрhttps://www.blogger.com/profile/12678407884541254388noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-54250140149675164742016-05-04T11:07:39.486+03:002016-05-04T11:07:39.486+03:00Думаю моя любовь к нему объяснима несколькими факт...Думаю моя любовь к нему объяснима несколькими фактами. Первый, и наверно наиболее весомый, это то, что xUnit исторически был первый тест фреймворк, с которым я начал плотно работать. Второе, список фактов, которые авторы приводят на своей странице Why Did we Build xUnit (http://xunit.github.io/docs/why-did-we-build-xunit-1.0.html) - прочитал их ещё когда был юн и зелен и мне они показались крайне убедительными. Из того что сходу вспоминается из приятных мелочей это IMHO чуть более удбное API: использование конструктора и IDisposable вместо SetUp и TearDown, NotEqual вместо AreNotEqual, отсутствие Greater в пользу ">" и т.п. Так же по ссылке меня убедила политика "Single Object Instance per Test Method". Ну вот и всё, из того что сходу вспоминается.<br />По факту, отличия не суппер важные, но даже если предпочтения 51% против 49%, то чего бы и не получить 2% for free?<br />PS: я за любой тест фреймворк, если это не MSTest!Oleksiy Davidichhttps://www.blogger.com/profile/06798005643408616225noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-84428012344678677912016-05-02T06:02:57.043+03:002016-05-02T06:02:57.043+03:00Начиная с 2016.1, кажется поддерживается из коробк...Начиная с 2016.1, кажется поддерживается из коробки. До этого - через расширение.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-85133511153442494262016-05-01T22:59:50.253+03:002016-05-01T22:59:50.253+03:00А через Resharper работает нормально ?А через Resharper работает нормально ?NNhttps://www.blogger.com/profile/16823052781877891385noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-16010169973346504272016-04-29T21:32:00.577+03:002016-04-29T21:32:00.577+03:00Для этого нужно поставить тест адаптер. Либо глоба...Для этого нужно поставить тест адаптер. Либо глобальный на всю студию, либо в виде нюгет-пакета.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-29835495252703805042016-04-29T21:29:40.668+03:002016-04-29T21:29:40.668+03:00NUnit 3.0, как-то плохо работает с тестовым окном ...NUnit 3.0, как-то плохо работает с тестовым окном студии, у меня не получилось сделать так, что бы тесты можно было запускать через студию.Снежный Барсhttps://www.blogger.com/profile/02617333911272963754noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-78776438916732164532016-04-28T00:57:55.842+03:002016-04-28T00:57:55.842+03:00NUnit везде 2.6.4, в планах 3.0, но там много пере...NUnit везде 2.6.4, в планах 3.0, но там много переделано.Anonymoushttps://www.blogger.com/profile/08559056369876557207noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-77997062184205336682016-04-28T00:56:47.166+03:002016-04-28T00:56:47.166+03:00NUnit везде 2.6.4, в планах 3.0, но там много пере...NUnit везде 2.6.4, в планах 3.0, но там много переделано.Anonymoushttps://www.blogger.com/profile/08559056369876557207noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-76352824854120407442016-04-26T23:44:31.311+03:002016-04-26T23:44:31.311+03:00Аналогично!Аналогично!Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-89871799588602519982016-04-26T23:44:16.027+03:002016-04-26T23:44:16.027+03:00Михаил, а ведь с тест адапатерами в экспрессе долж...Михаил, а ведь с тест адапатерами в экспрессе должны работать и Nunit, и Xunit. Попробуйте.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-81313990599865106202016-04-26T22:50:17.522+03:002016-04-26T22:50:17.522+03:00У нас NUnit.
Пока ещё версию 2.6. В планах 3.0 что...У нас NUnit.<br />Пока ещё версию 2.6. В планах 3.0 чтобы запускать параллельно тесты.<br />Ничего плохого сказать не могу.NNhttps://www.blogger.com/profile/16823052781877891385noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-70496349334309833542016-04-26T22:23:09.919+03:002016-04-26T22:23:09.919+03:00Аналогично - в основном MSTest. Причина - работает...Аналогично - в основном MSTest. Причина - работает интеграция с VS Express. Точнее "почти работает" - в 15ой студии они немного отломали переход к коду (<br /><br />По сути темы - также поддерживаю. Не понимаю, почему я должен видеть "Expected 2, got 1" вместо "Number of ears does not match. Expected 2, got 1.".<br /><br />У нас один из основных юз-кейсов для тестов - тестирование функций парсинга. Например - адреса. На вход получаем строку, на выходе - куча компонент адреса - регион, город, улица, и т.д. Соответственно, каждая компонента сравнивается своим ассертом. <br /><br />Хорошо, что в MSTest с этим все хорошо, поэтому в каждом ассерте у нас написано, какую компоненту мы сравнивали. Так что я сразу вижу что отломалось уже в сообщении об ошибке, а не лезу в код искать среди десяти одинаковых строк с ассертами.Mikhail Barghttps://www.blogger.com/profile/13610769544208096841noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-79621256962762073062016-04-26T17:24:08.438+03:002016-04-26T17:24:08.438+03:00Арсений, ценнейший комментарий. Очень толковое мне...Арсений, ценнейший комментарий. Очень толковое мнение Роя, развернутое и прагматичное.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-32756593916068256562016-04-26T17:22:49.368+03:002016-04-26T17:22:49.368+03:00Да так и сделали. Но получается путаница: какими м...Да так и сделали. Но получается путаница: какими методами пользоваться Xunit.Assert.Equal или XAssert.Equals? Кто-то использует одни, кто-то другие. Получается нужно постоянно переключать сознание при чтении или изменении кода.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-80817860489589822802016-04-26T17:21:53.377+03:002016-04-26T17:21:53.377+03:00Уффф. Для меня главная проблема в МСтесте - отсутс...Уффф. Для меня главная проблема в МСтесте - отсутствие параметризованных тестов.Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-84545451507181984052016-04-26T17:21:24.878+03:002016-04-26T17:21:24.878+03:00Леш, просто любопытно: а что тебе в xUnit-е сущест...Леш, просто любопытно: а что тебе в xUnit-е существенно больше нравится по сравнению с NUnit-ом?Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-46939284262251688682016-04-26T11:17:44.513+03:002016-04-26T11:17:44.513+03:00Распространенное мнение, про избыточность сообщени...Распространенное мнение, про избыточность сообщений в утверждениях. Мнение из книги The Art of Unit Testing более развернутое и менее догматичное:<br /><br />Avoid writing your own custom assert messages. Please. This section is for those who find they absolutely have to write a custom assert message, because the test really needs it, and you can’t find a way to make the test clearer without it. Writing a good assert message is much like writing a good exception message. It’s easy to get it wrong without realizing it, and it makes a world of difference (and time) to the people who have to read it.<br /><br />There are several key points to remember when writing a message for an assert clause:<br />■ Don’t repeat what the built-in test framework outputs to the console.<br />■ Don’t repeat what the test name explains.<br />■ If you don’t have anything good to say, don’t say anything.<br />■ Write what should have happened or what failed to happen, and possibly mention when it should have happened.<br /><br />А авторы XUnit, если уж решили своим фреймворком учить людей программировать, то выпиливали бы уже assert message из всех методов, а то непоследовательно выходит. И потом, у них висела раньше на страничке утверждение, мол NUnit так плохо сделан, что для продолжения развития надо бы его с нуля переписать, что и делает XUnit. По факту же новых возможностей не видно, зато переименовали атрибуты и сделали несовместимый Assert. Anonymoushttps://www.blogger.com/profile/08064289066204914117noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-35126099784390666692016-04-26T11:12:59.772+03:002016-04-26T11:12:59.772+03:00А чего бы не наваять собственных ассертов с тексто...А чего бы не наваять собственных ассертов с текстовыми сообщениями и прочим; которые, в конце концов, вызывают Assert.True?Anonymoushttps://www.blogger.com/profile/11725153141467656623noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-89199665175545414022016-04-26T09:52:13.691+03:002016-04-26T09:52:13.691+03:00Лично мне очень понравилась идея тестового фреймво...Лично мне очень понравилась идея тестового фреймворка Fixie (https://github.com/fixie/fixie). Какие я вижу 2 огромных плюса:<br />- convention over configuration, но при этом большая гибкость. Видел примеры когда при переходе с другого тестового фреймворка просто настраивали convention чтобы старые тесты работали.<br />- отсутствие в комплекте Assert библиотеки. Т.е. нету зависимости от "настроения авторов библиотеки", как в примере Сергея, а можно сразу использовать что то приличное типа FluentAssertion или ShouldAndreyhttps://www.blogger.com/profile/09120880431667361581noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-35106271381018702902016-04-26T09:44:53.484+03:002016-04-26T09:44:53.484+03:00Используем стандартный студийный от MS.
По теме со...Используем стандартный студийный от MS.<br />По теме согласен на 100%. Тоже самое, что писать код без комментариев. Ведь "код должен быть самодокументируемым" и его суть должна читаться из него же. Ага, когда в команде 10+ человек, и каждый вносит свою лепту (в тесты в том числе), остальные 9 должны прям сразу понять, из-за чего код не работает (возвращаясь от аналогии к тестам - прям сразу поймут что тест проверяет и какой надо сделать вывод).Anonymoushttps://www.blogger.com/profile/00316971585727005303noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-28987859884636974782016-04-26T09:01:46.416+03:002016-04-26T09:01:46.416+03:00На работе заставляют использовать NUnit,но большая...На работе заставляют использовать NUnit,но большая часть команды за переход на xUnit. В домашних проектах только xUnit.Oleksiy Davidichhttps://www.blogger.com/profile/06798005643408616225noreply@blogger.comtag:blogger.com,1999:blog-8596733192274108952.post-32032353695119766572016-04-26T07:26:17.045+03:002016-04-26T07:26:17.045+03:00Еще одно забавное наблюдение: есть Assert.Equal(st...Еще одно забавное наблюдение: есть Assert.Equal(string, string, ignoreCase), но нет Assert.NotEqual(string, string, ignoreCase). Странно:)Sergey Teplyakovhttps://www.blogger.com/profile/14300835272589262297noreply@blogger.com