Sunday, September 25, 2011

Reply: Some thoughts on tests' maintainability

This was to reply to an interesting post of my friend. Unfortunately, Blogger is not able to handle my long comment. Maybe it is too long, or may Blogger think I am a spammer. Anyway, the comment is long enough for me to dedicate one of my post here for it:


Interesting post. I'm in my first years practicing unit testing too. Won't miss leaving a long comment here!

It seems the very problem about unit testing for you is about maintainability of the test cases. It was a question for me too about how many tests to write for particular class. The lower number of tests you write, the lower maintainance problems, right?

There are some occassions I avoid writing tests for. I am not claiming these are right or wrong but it seems to work for me.

#1: During our undergrad years, I was introduced to unit testing (with JUnit.) What I remembered are that we are encouraged to write tests for as many methods as possible. We even generated the tests for plain getter/setters. Come to think of it now, that was totally unpractical!

So now I just skip the simple methods I am sure there are only silly test cases for it.

#2: Another thing is about writing test for private methods. When you design a class, you are giving your users some kind of contract by providng public methods. These are something that should be broken or be changed often. If you need to change these often, you may have to admit the class is incorrectly designed and thus rewrite/add the tests.

However, I do not test private methods. This give me some room of flexiblity where I can change/optimize/organize the inner working of the class. I can change the signature/working of private methods any way I would like to, but I just need to make sure the public methods do pass the tests.


#3: I do have some tests you referred to as 'small acceptance tests.' However, to perform 'unit' testing, you test one and only one class. If the class depends on some other concrete classes then you have to change them to abstract/interface instead. If you are testing more than one classes than that may be considered as 'integration' testing, or some other names.

That was quite hard core! While I know this, I don't mock out some dependencies for small classes. That would require some efforts. But still, I would write integration tests for it.


Clearly, innovations in our world do not start with requirements from users. So all these models starting from requirement gathering are all WRONG. If you want to introduce something now, use whatever you like and do whatever you want to. But if you are building something big, you must also need to look into the rear mirrors and you do need some confidence going forward. Unit tests, test coverage, etc. are some of the answers to that.



29 comments:

Tap said...

Interesting comment. I also have some comments on your comment.
- For #1, (I'm sure you know this but for other people who read this blog) getters/setters are smell of Feature envy(Surprise that I can remember name? No, just googled).
- For #2, you practice is quite dangerous for people who don't get/know SRP because some functionality may not be tested.
- For #3, I think it depends on how ugliest of the dependencies. But I think this problem is so language specific.

teerapapc said...

Definitely, I don't write tests for #1 and #2 too.

For #3, yes, its name should be integration test in typical definition but I think we can define a group of classes as a unit too. It's about definition and perspective.

By typical definition, my point is writing 1 test per 1 class are painful for me. IMO, writing only integration test is enough for testing the behaviors of the software.
Unit test only help you inspect the cause easier and faster.

Unknown said...

@TAP I actually wouldn't be surprised if you remember all those smell names :P

On testing private methods, this is a debatable topic. There is a trade-off here.

I see public methods as a window to privates. Clearly, it is easy for us to design test cases that do not exercise some parts of the privates. However, I do think this is enough in case unit test is used to verify the public behaviors of their classes under tests. In case ones want to exercise every possible paths of execution (and 100% coverage) they may go to test privates at the cost of lower flexibility in changing the implementation. I personally find this is rarely the case and prefer to have more flexibility in changing my class.

Some kinds of application may really need this though, e.g. financial app or health care. 100% test coverage would lift some confidence.

@tee Forgot to mention my another regular but probably not a good practice: I write 'unit' tests only for critical classes. I believe, if high % test coverage is not your concern, it is okay to be selective about the classes to test.

For last point, all kind of tests are about discovering the bugs early. Lone integration test may be enough if you can design the test cases such that it can reveal error in the system under test, exercise abnormal execution paths. Often, you can't (and I know, you can't :P)

By going further down to 'unit' level. It is easier to discover some weird paths you can't think of from system level. Some people (such as Tap, maybe :) are happy to go further down the 'private' level. It's just a matter of how far you are comfortable to go. At the cost of losing flexibility.

Tap said...

I'm OK with one test per group of classes as long as it run fast, easy to write(no too many setups, teardowns required) but when we work in team it hardly goes that way.

I think it's easy to tell them to write one class per test and waiting for them to ask how can I do with these dependencies than trying to tell them to avoid test preventor dependencies in testing group of classes.

One thing is most of other people classes I have seen, is already a combination of what I think it should be classes.

I have found many situations that when people write high-level class diagram(HL because they did't go deep to implementation) or layering component diagram, it always end up with that classes/components as one implementation class. These classes always named as "...Manager", "...Service".

karthireva said...


wow great,nowadays this type of blog is more important and informative technology,it was more impressive to read ,which helps to design more in effective ways


Dot Net Training in Chennai Guindy

Shalini said...

Superb i really enjoyed very much with this article here. Really its a amazing article i had
ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and
please keep update like this excellent article.thank you for sharing such a great blog with
us. expecting for your updation.
seo company
in chennai

Ancy merina said...
This comment has been removed by the author.
Routerlogin Net said...

I’m really impressed with your article,
Routerlogin
Routerlogin Net

Unknown said...

thanks for giving that type of information. ielts coaching in gurgaon

Unknown said...

thanks for giving that type of information. ielts coaching in gurgaon

Anonymous said...

Не знаете, где заказать суперскую женскую сумку. Заходите к нам кожаная сумка . Бронируйте и приобретайте стильные аксессуары прекрасного качества производста Италии Furla и Marino Orlandi и еще.

Anonymous said...

Потрясающе красивыеда еще невероятно точнейшие онлайн гадания для предречения своего ближайшего будущего: это исключительно то, что увидит вас на страницах нашего сайта. Точное гадание на картах оказывается действенным доступным и простым инструментом для извлечения важных данных из эфирного поля Земли.

Anonymous said...

КьюТоррент клиент действует в бэкграунд виде и не потребляет второстепенные энергоресурсы ПК. Неразумно транжирить средства на покупку дисков с новомодной игрой. Лишь пару лет назад крутая игрушка выставлялась в основном в лицензионных магазинах. В нынешнее время понравившуюся игрушку легко купить в интернете на специализированных площадках. Характерной чертой КьюТоррент систем представляется шанс свободной закачки дистрибутивов больших размеров. Получить популярную игру легко в рекордно короткий срок - скорость отклика BitTorrent сервера не на шутку большая, как тут дэдпул игра скачать торрент русская озвучка. Высочайшие запросы игрушки не сумеют испугать сегодняшних геймеров.

Anonymous said...

Thank you for the helpful article. https://youtube-to-mp3-converter.com/ - link to my site, I launched this recently. Youtube to mp3 service allows you to download music to your iPhone for free in less than a minute.

Anonymous said...

БитТоррент система осуществляет свою деятельность в фоновом виде и не "сжирает" основные запасы компьютера. Нецелесообразно выбрасывать наличные на закупку лицензии с подходящей игрушкой. Только несколько лет назад новейшая игрушка была в основном в лицензионных магазинах. В нынешние времена понравившуюся игрушку элементарно закупить в сети на специальных сайтах. Характерной чертой uTorrent сайтов является право дармовой загрузки дистрибутивов больших объемов. Загрузить популярнейшую игрушку достаточно просто в рекордно короткий срок - скорость tracker хостинга слишком большая, как к примеру тут https://games9.ru/load/muzykalnye/. Заявленные требования игрушки не сумеют перепугать теперешних игроманов.

Anonymous said...

Чуть ниже указаны центральные приоритеты коммуникации с данной фирмой. Воспользуйтесь максимальными преимуществами только на сайте бетонные вазоны для цветов уличные купить новосибирск. Большой выбор оборудования для сферы жилстроя.

Anonymous said...

Плитку керамическая плитка fabresa создают в невероятном количестве, и всякая контора пытается запустить собственный невообразимый стиль. Цена кафеля также разнится. Множественное количество узоров и размеров.

Anonymous said...

МФО «СкороДеньги» предоставляет всем потребителям займиго онлайн и шанс выбора микрофинансовых обществ. На свое усмотрение выбирайте подходящий микро финансовый продукт для различных начинаний. Людям уже нет необходимости ходить в кредитную организацию, дабы выписать нужную сумму.

Anonymous said...

Гадание на бывшего парня дает угадать, что вас подстерегает в ближайшем времени. Шанс понять будущие события непрерывно завлекал род человеческий. Каждый хочет подсмотреть собственное грядущее и считает конкретные виды гадания по максимуму достоверными.

Anonymous said...

Понятное меню и быстрый поиск – это гарантированный способ подобрать интересную азартную игрушку. Только лишь на нашей площадке casino x com официальный сайт пользователь сможет нырнуть в удивительные путешествия. Колесо фортуны – наиболее трендовый игровой аппарат в числе виртуальных игр Казино икс.

Anonymous said...

Интернет-игры обрели существенную доступность на любом континенте. Отзывы игроков о казино х – используйте преимущества безопасной игры и выигрывайте серьезные бабки. Модернизация самых новых технологий предлагает развлекательным ресурсам серьезно улучшить предоставляемые услуги.

Anonymous said...

Познай свою удачу – авторизируйся на сайте франк бонус совсем бесплатно! Только завершив стандартное обучение, клиенты смогут начать управлять реальными суммами. Система демонстрационной игры позволит познакомиться с работой интернет площадки.

Anonymous said...

Интерактивное интернет-казино Джо Казино – это отличный метод получить реальные наличные. Испытать собственную фортуну можно только при помощи joycasino скачать. Красивый дизайн портала приятен взору, а невероятное количество игр дает возможность проверить собственную фортуну.

Anonymous said...

Стоимость керамики тоже отличается. Плитку grespania sajonia roble 19.5 х120 создают в огромном количестве, а всякая контора планирует представить собственный эксклюзивный проект. Множество тонов и размеров.

Anonymous said...

Стоит обратить внимание, что кальмар хранит свои свойства до 3 дней. Закупайте морские продукты https://yenashop.ru/forum/index.php?PAGE_NAME=message&FID=2&TID=10791&TITLE_SEO=10791-pokupayte-ikru-u-bezopasnykh-postavshchikov-v-sovremennom-shou_rume-moreproduktov-_krasnyy-zhemchug&MID=11972&result=new исключительно у проверенных импортеров, на сайте «Красный жемчуг». Приобретая рыбные деликатесы необходимо бросить взор на сроки хранения.

Henry said...

Nice post Admin.Keep sharing. BEP20 Token Development Company |Token Development Services | Token Development Company | | NFT Gaming Platform Development Company

Bajeelaaluin Tech Blog said...


NFT Marketplace Development

Bajeelaaluin Tech Blog said...

nft-marketplace-development-company
nft-game-development-company

Bajeelaaluin Tech Blog said...

Nice post, you can read the post
Cryptopunks clone script