I love Test Driven Development (TDD), but there are some parts of it that I've found pretty painful in the released versions of Flash/Flex Builder. Given the benefits of TDD, I've chosen to grit my teeth and just bear with it. Last month I went to 360Flex, which showcased some of the productivity enhancements in Flash Builder 4.5, and I am thrilled to see that Adobe has addressed these pain points.
Automatic Class Generation
In most languages, TDD consists of writing a test, running it and watching it fail, writing code, and running it and (ideally) watching it pass. If it doesn't, keep modifying the code until it passes. In compiled languages such as Actionscript, many coders will add a step in the beginning where they write the first test before the Class under test exists. I have found this a pain in Flex 3 and Flash Builder 4, because my workflow winds up something like writing the test, knowing it won't even compile, then copying the name of the new Class. Then I'd use the New Class dialogue to create the Class, making sure to paste in the name of the Class from my Test.
Finally, I'd add the import statement so that mxmlc could compile the new Class into my test.
Flex 4.5 adds a new problem indicator that shows that something
is missing, a white question mark in an orange circle. When you see this, it means that there is a reference on that line that Flex doesn't yet know how to interpret. You'll be able to figure out exactly what by looking for the squiggly red line similar to what you see in a word processor when you've mistyped a word.
If you highlight the word and press Control+1 (Command+1 for Mac users), Flex will offer you the option of creating the missing definition. So you can create the Class definition right from the reference, no copying and pasting needed. Most of the time, Flex will even add the import statement as well.
Automatic Member Generation
By the same token, when you create a new property or method on your new Class, you can generate it the same way, by highlighting it and pressint Ctrl+1. Note that if the Class is inside a Library project, you'll still have to create the member variables or properties by hand, as this doesn't seem to work across projects as of this writing.
Refactoring Help
A lot of times I get halfway through a project and I realize that the Class really should be in a different package. One thing I hate about TDD is that it means there are way more references to a Class under test than one that is not tested. This means that you have to go in and fix the references to the Class you moved, not just in your project source code, but in all of your tests. In effect, your tests can lock you into a less than optimal directory structure.
Flash Builder 4.5 has changed all that. Just move or rename your Class, and all the references to it will update—and it won't take forever or crash Flash Builder (looking at you, Flex 3).
Flash Builder 4.5 has a lot of productivity enhancements like this, and you can get a full list here.
Changes for Running Unit Tests
When I first pointed Flash Builder 4.5 to my existing Flex 4.1 project, I couldn't figure out how to run my unit tests, because the "Execute FlexUnit Tests" menu item is now missing from the "Run" menu, and the application FlasnBuilder 4 created for my old unit tests had an error in it so that it wouldn't run. I wound up deleting those mxml files, but then I was at a bit of a loss as to how to run my existing unit tests.
It turns out that you need to right click on your Test Case or Suite and then select either "Run As FlexUnit Tests" or "Execute FlexUnit Tests." The major difference I see between these two options is that "Run As" provides a dialog similar to what you saw in Flash Builder 4 where you can select multiple Test Cases and/or Suites to run at one time. "Execute FlexUnit Tests" seems to run tests within the selected file or folder only, without offering the dialogue that would allow you to run other tests.
Once you have run a unit test from one of these right click menus, it will be available under the "Run" and "Debug" buttons in the main menu, but you can't change which tests will be run when you do this.
All in all, I see the changes in Flash Builder 4.5 as extremely positive for fans of TDD. I would like to see Adobe go a lot further, but overall this new version is a huge step forward.
0 comments:
Post a Comment