Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

unit tests

04.11.18 20:25
Re: unit tests
 
  moose старожил
в ответ dymanoid 04.11.18 18:13, Последний раз изменено 04.11.18 20:32 (moose)

т.е. это на случай, если мы начнем что-то менять без оглядки на уже отлаженное?

а я читаю другое. например, такой вот "рекламный набор":

https://dzone.com/articles/top-8-benefits-of-unit-testing

, который, похоже, сто раз цитируется."


в качестве хэллоуорлд для юнит тест любят приводить тест чего-то "калькулятор", и тестируют его "эдд". и юниттэст выглядит очень красиво: проверь, что вернет на 2+2, если четыре - ок, нет - бей тревогу!

у меня задача, как я уже описал, проверить работу ф-ии, которая не "делает очень много", как алекс описал. она просто

- читает содержимое сайта (что тут проверять?)

- ищет там определенные тэги (списки тэгов), предполагая, что там находится то, что мы ищем (снова что проверять?)

- если находит - возвращает что нашла в удобном формате

- если не находит (это может выясниться на разных этапах: что-то с интернетом, что-то с сайтом, ...?) - возвращает нечто, что дает понять, что не нашли.


можно, конечно, "промОчить" сайт, заставив читать не сайт, а какой-то мок, причем их должно быть несколько, и переделать всю кухню: пусть ф-я не делает все это, а разделим ее пополам: одна часть читает сайт. для нее юниттест - просто вернула она нечто длиннющее или нет. вторая часть получает это прочитанное (или мок) на входе, и должна из этого что-то извлечь. и тут мы можем понаделать моков на любой случай: прочитанное содержит нечто, из чего извлекается "ура!", прочитанное содержит то же "ура!", но в другом (третьем) допустимом месте, сайт изменил структуру, и "ура!" уже находится в другом месте, мы его не находим...

можно, конечно, это проделать. но это:

- потребует дополнительных затрат

- если структура сайта изменится, тесты будут проходить, но результаты мы получать не будем (хотя они будут присутствовать на сайте, просто искать их нужно теперь иначе). т.е ваш случай "Даже на "а + b", потому что в будущем кто-то может поменять тип аргументов метода, например, и a+b неожиданно станет возвращать мусор." будет иметь место быть, но наш юниттест не поможет нам это поймать: тесты, повторяю, будут и дальше благополучно проходить на красиво подобранных моках, а мы будем получать или мусор, или ничего. и самое плохое - может случиться, что выводы станем делать, основываясь на наших юниттестах. берусь утверждать, что такие вещи можно протестировать только интекрационными тестами, а выдумывать для подобных вещей юниттесты - дань моде, которая только мешает жить.


человек под фонарем что-то ищет. второй подходит:

- что-нибудь потеряли?

- да, вот ключи выронил...

- здесь?

- да нет, вон там, в кустах.

- а почему здесь ищете?

- здесь светлее...

 

Перейти на