Create a test DSL to test the DSL
Yesterday I asked how we can efficiently test this piece of code:
specification @vacations: requires @scheduling_work requires @external_connections
Trying to test that with C# code resulted in 1500% disparity in number of lines of code. Obviously a different approach was needed. Since I am in a DSL state of mind, I wrote a test DSL for this:
script "quotes/simple.boo"
with @vacations:
should_require @scheduling_work
should_require @external_connections
with @scheduling_work:
should_have_no_requirements
I like this.
You can take a look at the code here.
Comments
Nice, but how are you going to test that the testing DSL works? ;)
Are you going to test this new DSL with itself?
Quis custodiet ipsos custodes?
Its kind of nice. You have to write a TestDSL engine to test your dependencies on your DSL script.
What happens if you shuffle the should_require statements?
Nothing much, there isn't an order dependency in the implementation that I wrote for them
That's a lot more than a 1500% disparity now (yes I know it's just framework code and its not repeated, I'm just being pedantic). I think writing another full on boo dsl for testing something so trivial is a bit extreme. Why not just a base test class? Or some extension methods?
"quotes/simple.boo".With("vacations").ShouldRequire("scheduling_work")
"quotes/simple.boo".With("vacations").ShouldRequire("external_connections")
"quotes/simple.boo".With("scheduling_work").ShouldHaveNoRequirements()
Totally breaks AAA, but that's easily fixable.
Creating testing DSL's is something I just started doing and it has been awesome. I found that there are certain patterns that one tests repeatedly, so this can help.
You aren't testing the code, you're writing the same program twice :-)
Is this really useful?
Max,
Try this, then:
Script:
specification @vacations:
Tests:
with @vacations, Users(51):
with @vacations, Users(49):
Aaron,
That is because you consider only the code that you have here. Consider the case of a useful DSL where you have plenty of scripts that you want to test.
Since the cost of writing a DSL is very low, I see this is as a huge benefit.
yes. that also. 1500% is exactly... well... more or less more than 90% less time.
i like this too.
Comment preview