Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Any good arguments for not writing unit tests? [closed]

Tags:

unit-testing

I have read a lot of threads about the joys and awesome points of unit testing. Is there have a good argument against unit testing?

like image 340
Ben Dauphinee Avatar asked May 29 '10 01:05

Ben Dauphinee


People also ask

Are unit tests always necessary?

Unit tests are also especially useful when it comes to refactoring or re-writing a piece a code. If you have good unit tests coverage, you can refactor with confidence. Without unit tests, it is often hard to ensure the you didn't break anything.

Why should we write unit tests?

One of the benefits of unit tests is that they isolate a function, class or method and only test that piece of code. Higher quality individual components create overall system resiliency. Thus, the result is reliable code. Unit tests also change the nature of the debugging process.

What are the advantages and disadvantages of writing unit tests?

Advantages of unit testing are that it reduces or prevents production bugs, increases developer productivity, encourages modular programming. Disadvantages are that it is time-consuming, can't be challenging to cover all the code, and won't catch all bugs.

What happens if unit testing is not done?

If any of the unit tests have failed then the QA team should not accept that build for verification. If we set this as a standard process, many defects would be caught in the early development cycle, thereby saving much testing time. I know many developers hate to write unit tests.


2 Answers

In the places I have previously worked, unit testing is usually used as a reason to run with a smaller testing department; the logic is "we have UNIT TESTS!! Our code can't possibly fail!! Because we have unit tests, we don't need real testers!!"

Of course that logic is flawed. I have seen many cases where you cannot trust the tests. I have also seen many cases where the tests become out of date due to tight time schedules - when you have a week to do a big job, most developers would spend the week doing the real code and shipping the product, rather than refactoring the unit tests for that first week, then pleading for at least another week to do the real code, and then spending a final week bringing the unit tests up to date with what they actually wrote.

I have also seen cases where the business logic involved in the unit test was more monstrous and hard to understand than the logic buried in the application. When these tests fail, you have to spend twice as long trying to work out the problem - is the test flawed, or the real code?

Now the zealots are not going to like this bit: the place where I work has largely escaped using unit tests because the developers are of a high enough calibre that it is hard to justify the time and resource to write unit tests (not to mention we use REAL testers). For real. Writing unit tests would have only given us minimal value, and the return on investment is just not there. Sure it would give people a nice warm fuzzy feeling - "I can sleep at night because my code is PROTECTED by unit tests and consequently the universe is at a nice equilibrium", but the reality is we are in the business of writing software, not giving managers warm fuzzy feelings.

Sure, there absolutely are good reasons for having unit tests. The trouble with unit testing and TDD is:

  • Too many people bet the family farm on it.
  • Too many people use it as a religion rather than just a tool or another methodology.
  • Too many people have tried to make money out of it, which has skewed how it should be used.

In reality, it should be used as one of the tools or methodologies that you use on a day to day basis, and it should never become the single methodology.

like image 76
slugster Avatar answered Oct 13 '22 16:10

slugster


Virtually none of my bugs would have been found by unit testing. My bugs are mostly integration or unexpected-use-case bugs, which in order to have found them earlier, more extensive (and ideally automated) system tests would have been the best bet.

I'm waiting for more evidence-based and less religion-based arguments for unit testing, as dummymo said. And I don't mean some experiment in some academic setting; I mean an argument that for my development scenario and programming ability, cost-benefit would be positive.

So, to agree with other answers to the OP: because they cost time and cost-benefit is not shown.

like image 42
Conrad Albrecht Avatar answered Oct 13 '22 14:10

Conrad Albrecht