Created
May 10, 2014 11:45
-
-
Save gregoryyoung/848b8febc158d7f6a424 to your computer and use it in GitHub Desktop.
Context
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class AccountSpecifications | |
{ | |
const decimal perTransactionFee = 0.99m; | |
public Specification when_withdrawing_money() | |
{ | |
var currentBalance = 13.0m; | |
return new ActionSpecification<AccountContext> | |
{ | |
On = () => new AccountContext { | |
Account = new Account(currentBalance), | |
Command = new WithdrawCommand | |
{ | |
Amount = 12.00m | |
} | |
}, | |
When = account => account.Handle(cmd), | |
Expect = | |
{ | |
account => account.Balance == (currentBalance - cmd.Amount) - perTransactionFee, | |
account => account.CloseToZeroBalance | |
}, | |
}; | |
} | |
public class AccountContext { | |
public Command Command; | |
public Account Account; | |
} | |
} |
Anyway, having specs defined as fields leads to inconvenient developer experience with test runners
Strong-typing? Why not? :)
If you want strong typing just make your own template (like what ActionSpecification does).
For runners I know all about fields :) I built all that support into mighty moose for simple.testing and for machine.specs
btw for a reference see:
At the end of the day its just doing Expect(When(Given())) you can change what the pipeline types are along the way (the templates just give strong typing to it as a template)
ok, I'll have a look. Tnx!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To be clear on the ability to use it with just command. you can pretty easily write your own template to support this or could just drop in a dynamic :)
If you look in the other sepcification templates (which are just examples btw its expected that you may run your own) you will notice operations called transformedby you could do this there... or you could just do this
CommandContext {
dynamic sut;
Command command;
}
yeah I know not the most beautiful do you really need strong typing here?