- Bug and Feature Tracking using Fusion Forge
- Git Repository
- Git Flow
- Grails Framework (Built on Groovy, Built on Spring, Built on Java)
- Style enforcement through eclipse
- Hudson/Jenkins for Continuous Integration
- Seleninum for Acceptance Testing
The tools are there, now its time to start putting them together. Our old projects, our non-VIVO projects, have never used unit tests. Its a change in style that even our more senior engineers are just now starting to do. What is a unit test? According to Wikipedia it is "a method of testing an individual unit of a software project." In our case, it is a test of each class in our Grails project. Its interesting teaching developers to test. If a model (or domain) accepts null values, do you have to test that it will save and validate when given a null value? Of course you do, but until that's a part of your programming knowledge base it might not occur to you. If you test that a model properly fails validation when given a null value for a field that is null, do you have to test for the error that is returned? Yes, just testing for the validation doesn't allow you to confirm that a the view will be given the proper error.
Lesson 1, when changing the culture of development at your group you may encounter slackers.
Lesson 2, be specific when you say "fix the tests", explain that means fixing either the code or the test depending on the reason the test is failing.
So, we are learning as a group to test more. Unit tests lead to integration tests, which thankfully in Grails are built similar to unit tests. We've stumbled, found tests that are basically integration tests in unit tests and vice versa. Found items that should have been tested for and failed later. Next step, acceptance tests!