unit tests
Почему? Я вполне могу один и тот же метод в 10 потоках прогнать, чтобы попытаться ошибки синхронизации найти. Для этого мне ничего "снаружи" тестируемого класса не надо. Чем не юнит-тест?
Просто прохождение теста не гарантирует что код действительно thread-safe.
Потому что это будет тест ради клизмы, а не ради теста. В реальной среде всё будет по-другому - здрасьте, рейскондишн. И на кой писать такой юнит-тест тогда?
Юнит-тесты пишут, не для того чтобы ошибки искать, кстати.
Юнит-тесты пишут, не для того чтобы ошибки искать, кстати.
у меня тоже такое мнение сложилось (не берем во вниманиее ТДД). просто наличие юниттестов и возможности их автопрогона позволяет убедиться (грубо), что, наваяв что-то в одном месте, мы не нарушили ничего в другом через какой-нибудь побочный эффект. хотя почему для "ошибки искать" юниттэсты не годятся? ведь мы все равно так или иначе наш код тестируем. если выработана привычка делать это юниттэстами, то неплохо, наверное.
я против юниттэстов ради юниттэстов, или когда ресурсы на их создание превосходит затраты на основной код. ну и не на каждый пук следует писать юниттэст. бывает "очевидный код". хотя ошибки в таком обходятся как правило дороже всего : )
Потому что это будет тест ради клизмы, а не ради теста. В реальной среде всё будет по-другому - здрасьте, рейскондишн. И на кой писать такой юнит-тест тогда?
Не совсем. Понятно что гарантии нет, но многие ошибки синхронизации или доступа к мониторам всё же отлавливаются. Так что лучше такой ничего не гарантирующий тест, чем никакого. Из личного: один такойтест помог сразу найти ошибку в исправленном коде - тупо не то имя монитора написано было, соответственно сразу дэдлок.
Юнит-тесты пишут, не для того чтобы ошибки искать, кстати.
И для этого тоже. Не далее как вчера. Сообщили об ошибке - "что-то annotation processor не обрабатывает класс MyPowerfullClassWithThousandMethodsAndFields, мы класс проверили, вроде всё по документации."
Юнит тестов у процессора нет. Взял документацию и четко по ней написал блэкбокс тесты. Прогнал, нашёл ошибку. Если поле было аннотировано хоть какой-то аннотацией другие проверки не делались.
Что я сделал не так, и почему я не мог написать юнит-тест чтобы искать ошибку?
попалась в каком-то контексте книга Working effectively with legacy code, вспомнил, что здесь тоже советовали, и купил (сорок с чем-то выкинул). что могу сказать? давно не делал такой бесполезной траты денег (на книгу) и времени (на ознакомление). естественно, поначалу читал все подряд, даже трогательные рассказы о том, как мама (или папа?) в детстве купили компьютер, и как он ... в общем, как автор "рос в теме". затем, когда стало ясно, что количество слов явно превышает количество смысла, стал чинать только код до волшебного улучшалова и после, а когда скука совсем одолела, перешел сразу к стр. 323 (в книге 423), где все изложенное еще раз изложено более сжато (но все равно размазано).
еще раз повторю, напрасно потратил время/деньги. не попадитесь. не извлек
из текста для себя НИЧЕГО нового (а уж полезного тем более). вот так бывает.