- 1
- 2
- 3
- 4
var usr = Enumerable.Range(1, 1)
.Select(id => new User(1, "FooBar", "desc" + 1, DateTime.UtcNow))
.ToReadonly()
.GetRandomElement();
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+102
var usr = Enumerable.Range(1, 1)
.Select(id => new User(1, "FooBar", "desc" + 1, DateTime.UtcNow))
.ToReadonly()
.GetRandomElement();
Из юнит-теста. Копипаста рождает чудовищ.
guest 08.12.2012 13:19 # −3
VasyaMatros 08.12.2012 13:37 # +1
Тесты используют в качестве источника данных ин-мемори рид-онли коллекции и выбирают оттуда рандомом. Кому-то захотелось кастома, герой скопипастил кусок кода из стора, подкрутил согласно нуждам и, вероятно, был очень доволен, что цель достигнута без применения мозга.
Dummy00001 08.12.2012 23:25 # +2
а после еще пары тысяч вывереных тест-кэйсов приходит и просвещение: копи-паст это очень хорошо, все руками писать - плохо. потому что копи-пастом меньше глупых очепяток делается. и если находится ошибка, то ее простой заменой в редакторе можно пофиксить - сразу во всех тест-кэйсах.
scriptin 08.12.2012 23:30 # +2
Проблема не в опечатках, а в "недопечатках", когда пропускаешь места, где нужно внести изменения. И именно поэтому нужно не копипастить, а выделять похожие участки кода в отдельные функции/классы.
DRY, motherfucker!
Dummy00001 08.12.2012 23:51 # +2
Это значит вы неправильно копипастите.
Шучу, случается. :)
> И именно поэтому нужно не копипастить, а выделять похожие участки кода в отдельные функции/классы.
Применение традиционных методов хорошего программирования (продуманый дезайн, правильно модулировано, хорошо структурировано) к тест-кэйсам имеет один убийственных недостаток: реализация тест становится сложным, и требует своего собственного теста. Тупая структура тест кэйсов есть часто желаемый эффект, что бы не уподоблятся тестируемой программе.
Ну да я думаю у каждого опыт свой.
LispGovno 09.12.2012 00:49 # 0
scriptin 09.12.2012 12:33 # +2
3.14159265 10.12.2012 20:16 # +1
PascalGovno 10.12.2012 20:37 # +6
3.14159265 10.12.2012 20:50 # +1
scriptin 09.12.2012 12:40 # 0
По мне, так гораздо хуже иметь километры почти одинакового кода, чем несколько вызовов методов с понятными именами. Отлаживать такие тесты тоже гораздо проще - каждое действие производится только в одном участке кода.
И, кстати, сложные тесты могут быть признаком сложного кода - если код состоит из огромных кусков, то и тесты будут такими же. Для этого и придумали CRAP-метрику.
http://googletesting.blogspot.ru/2011/02/this-code-is-crap.html
При тестировании в PHP на PHPUnit меня больше всего убивает не сложность тестов, а непродуманность языка - нужно перед каждым вызовом метода писать `$this->`, что очень визуально засоряет код.
3.14159265 10.12.2012 20:12 # 0
В тестах реально много копипаста, без которого будет хуже.
>И именно поэтому нужно не копипастить, а выделять похожие участки кода в отдельные функции/классы.
"Заменить 20 строк копипасты 40 строками разного кода".
А еще на отдельные функции/классы тоже нужно написать тест.
bormand 10.12.2012 21:21 # +1
wvxvw 10.12.2012 22:58 # 0
3.14159265 10.12.2012 20:15 # 0
Я написал себе хелпер-метод, который принимает vararg и радуюсь:
assertTru(a,b,c,d!=null,e,f,g==h);
Это пример, доработки, казалось бы известного, широкоиспользуемого фреймворка.
Но есть случаи где так просто копипасту не обойдешь
roman-kashitsyn 11.12.2012 12:48 # +2
Есть проблема в таком подходе - на первый взгляд сложно понять, что же именно сломалось. Хорошо, если assertTru возвращает номер упавшего условия, но иногда он может просто не успеть этого сделать: assertTru(x != null, x.getAttr() == 5); легко может грохнуться с NPE.
Мне нравится подход property-based testing, реализованный, например, в QuickCheck. Но его, к сожалению, не всегда приемлимо применять.
3.14159265 11.12.2012 15:16 # 0
Само собой.
>x.getAttr() == 5
Ну всегда можно завести int.
LispGovno 11.12.2012 16:43 # +2
assertTru(()=>x != null, ()=>x.getAttr() == 5);
wvxvw 09.12.2012 01:14 # −2
scriptin 09.12.2012 12:46 # +1
1. Соответствие распределения значений желаемому (обычно равномерное) - на достаточно большой выборке оно должно стремиться к идеальному
2. Независимость генерируемых значений друг от друга
3. Независимость от внешних факторов (кроме входного значения для ГПСЧ)
и т.п.
Общее правило: для вероятностных функций пишутся вероятностные тесты.
bormand 09.12.2012 13:15 # +1
PascalGovno 10.12.2012 20:42 # +1
GravatarGovno 21.07.2021 00:05 # 0
HEu3BECTHblu_nemyx 02.08.2021 12:28 # +1
wvxvw 09.12.2012 14:10 # −1
TarasB 09.12.2012 11:12 # +6
guest6 02.08.2021 15:34 # 0
guest6 02.08.2021 15:35 # +1
guest6 02.08.2021 15:36 # 0
Кстати, linq это прикольно. Такой как-бы декларативный язык для выбора всякого говна из енумераблов, но при этом статически типизированный
bormand 02.08.2021 17:26 # 0
guest6 02.08.2021 17:29 # 0
bormand 02.08.2021 17:33 # 0
guest6 02.08.2021 17:38 # 0
Только беркли это кивалуе а не реляционка
Desktop 02.08.2021 17:53 # 0
CoronavirusGovno 02.08.2021 18:04 # +1
https://www.sqlite.org/datatype3.html
SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:
• TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
• REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
• INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
Desktop 02.08.2021 19:08 # 0
полез проверить один свой проектик, а там вот это вот всё
bormand 02.08.2021 18:26 # +1
CoronavirusGovno 02.08.2021 18:05 # 0
bormand 02.08.2021 18:28 # +1
bormand 02.08.2021 18:34 # 0
CoronavirusGovno 02.08.2021 18:40 # +1
bormand 02.08.2021 18:42 # +1
CHayT 02.08.2021 18:47 # 0
guest6 02.08.2021 18:51 # +2
bormand 02.08.2021 18:54 # +2
CoronavirusGovno 02.08.2021 18:58 # +3
Desktop 02.08.2021 19:06 # +1
PolinaAksenova 02.08.2021 18:48 # +2
guest6 02.08.2021 18:51 # +4
>Какой большой
Гост, что они с тобой сделали?
Desktop 02.08.2021 19:11 # +2
правда, не знаю, зачем завидовать такой длине
непрактично
bormand 02.08.2021 19:15 # +2
Too long for gcc.
guest6 02.08.2021 19:41 # +1
j123123 02.08.2021 19:28 # +2
Hacpy 02.08.2021 22:36 # +1
Hacpy 02.08.2021 22:34 # −1
Нет, "MySQL" таким родился
guest6 02.08.2021 22:37 # 0
Так и развивается
Fike 02.08.2021 23:48 # 0
DECAHTHblu_nemyx 03.08.2021 00:24 # +1
Бедного Fike заперли, и чтобы ему выбраться, пришлось освоить какой-то ключ…. (( owo
guest6 03.08.2021 00:26 # +2
Иксы поддерживали компост когда еще даже kbd не было, а был один сраный xmodmap (да пребудет он на хую вечно!)
Странно, что ты только открыл
rotoeb 03.08.2021 06:24 # +1
CocaColaGovno 04.08.2021 10:59 # 0
JloJle4Ka 04.08.2021 12:35 # 0
ничего, что женщин лапали сотрудники мужского пола?
нормально, что руководители приставали к женщинам?
а может нормально, то что одна сотрудница покончила с собой после мероприятий компании, где подверглась "харасменту"?
anonimb84a2f6fd141 09.12.2012 21:06 # −5
3.14159265 18.12.2012 21:14 # +2