-
-
Couldn't load subscription status.
- Fork 3.3k
Description
[text extracted from AlistairIsrael's https://github.com/KentBeck/junit/issues/32]
Merely voicing out an idea here that came to mind as I've been using @rules. I'd like to put it in here just for the record, but if you guys have a better idea for the direction @rules should go I'd be happy to go with that.
Currently, to use a rule the test class has to declare and instantiate the Rule object, like so:
@Rule
public MagicMocker magicMocker = new MagicMocker();
Basically, I can see myself, and others, coming up with quite a few rules that the test itself doesn't interact with (and that have default constructors).
My idea is to let the test simply declare any such rules, using another annotation, and have JUnit take care of instantiation.
JUnit already instantiates the test classes themselves, so I don't see why it can't instantiate other things. JUnit also already provides class-level annotations that affect test behavior (@RunWith) so I think whole the idea isn't entirely foreign to JUnit.
For example,
@Rules({TestPersistenceContext.class, FixturesLoader.class})
public class DaoTest {
In the above, JUnit could take care of instantiating, then applying the rules that set up the test database and load data fixtures. The FixturesLoader.class could be a MethodRule that gets applied to all test methods. The resulting test code is more concise and less cluttered with rules/fixture setup.