[crossfire] Unit tests
Mark Wedel
mwedel at sonic.net
Tue Mar 7 01:06:28 CST 2006
While what tchize says about writing unit tests make sense, I'm also a little
skeptical that it will actually get done in the way described and/or have other
bad effects.
For example, if there is the requirement that a unit test be written to
test/confirm bug fixes, I could see it leading some people say they don't really
want to spend the time to write such a test when the fix itself is trivial. And
then they don't fix the bug.
Likewise, while writing unit tests before any large changes are done, I know
from my experience finding time to actually code the change and do basic testing
is difficult. If it now takes 50% longer because unit tests also have to be
written, that has various implications.
In my ideal world, I'd love for there to be unit tests for everything. I'm
just not sure what level we can really achieve. If we create/enforce draconian
policies, I think the more likely scenario is people just stop writing new code,
and not that they write unit tests (and/or they fork the code to a version such
that they don't have to write unit tests).
I'm certainly not saying unit tests are a bad thing. But I think we have to
keep in mind the people who are likely to write the tests.
All that said, quick thoughts:
1) Basic function/API tests should be easy to write in most cases (if I call
xyz(a,b) does it do the right thing). Those shouldn't be much an issue.
2) A lot of the code operates on extensive external state (map data, archetypes,
etc). So to test the function, you need to have a map set up in the right way
(right objects on the map, etc).
In this case, you want something that makes such a test easy. What may be
easiest is in fact just a large set of test maps, and the unit test could
effectively hard code those, with known coordinates (test object being only
object at 0,0 and I know I want to insert that at 5,5)
My thinking here is that if I can write the basic test to reproduce the bug in
<10 minutes, I'll probably write the test. IF the framework is such that it
will take me an hour, then I probably wouldn't.
3) If the number of tests grow, it is probably desirable to be able to run some
specific subset of tests, eg, I don't want to have to wait 15 minutes for the
server to run all the tests when I'm trying to fix some specific bug - I just
want it to run my test. After all is done, then perhaps running all tests
before commit makes sense.
More information about the crossfire
mailing list