Comments (8)
I'm recklessly trying to do this myself:
- Added
org.junit.rules.ClassRule
, withapply(Statement next, TestClass testClass)
. - Modified
ParentRunner#classBlock()
to callwithClassRules()
which looks for fields that are public, static, and implementClassRule
. - For each of those fields, call
apply()
to append to the statement 'chain'. - Also, modify
BlockJUnit4ClassRunner
to only apply@Rule
fields that implementMethodRule
.
Am I on the right track?
Here're my changes:
http://github.com/AlistairIsrael/junit/commit/79ef5a7e1d7fa144cc81c9414f4791aaea8b3d75
For the record, it works. I've successfully split a Derby+Hibernate+DbUnit @Rule
into a static, ClassRule
that initializes Derby and Hibernate, and a regular MethodRule
that delegates to DbUnit loading/unloading of database fixtures using a local 'build'.
from junit4.
Hi,
I think I did a similar thing in my fork http://github.com/brolund/junit
In addition to what you describe, my goal was to be able to register rules for methods, classes and suites on a root suite and then be able to propagate them to an entire suite hierarchy. My primary reason is to be able to generate documentation like in my pet project
http://www.agical.com/bumblebee/bumblebee_doc.html
but without having to make my own suite implementations.
Of course, this approach could be used for a number of reasons. Suite-scope dependency injection, logging, resource creation and management. It won't work well for running parallel tests (as of now).
from junit4.
Yup, the natural extension of rules on methods, then rules on classes, would've been rules on suites. My other suggestion along this line was to let rules be declaratively specified, without the end-user having to instantiate a no-arg, non-interactive rule.
I also noticed you used the RunNotifier
to pass around 'ancestry' because of the "lack of a context-like structure in JUnit". I ran into a similar issue when I experimented with declarative, class-level rules. There was no easy way for the ParentRunner
to pass the test instance, and instances of rules to children.
So I stopped myself there, and contented myself with the smallest change that could apply to my still limited needs. I tend to agree, though, that JUnit might need some kind of "test context" to pass around in the future.
from junit4.
Hi. I've just discovered the problem of a lack of a class-based @rule myself, and located this message: http://tech.groups.yahoo.com/group/junit/message/22522 - I notice there's been no activity on this issue since. Is there any likelyhood of it landing soon? Is there anything I can do to help it along?
from junit4.
Just an update, updated my class rules tree and 'pulled' from latest JUnit master in to http://github.com/AlistairIsrael/junit/tree/435195876d559ec780e21f4f53e8db6849a65b23
from junit4.
Thanks. Kent and I will review Monday, if not before.
from junit4.
Fixed and accepted at HEAD
from junit4.
Close
from junit4.
Related Issues (20)
- Confusing problem... get differernt result between `main method` and `test method` HOT 7
- Compilation error in org.junit.runner.Result - ObjectInputStream.GetField.get(name, object) throws ClassNotFoundException
- Update to hamcrest 2.2 HOT 16
- Test case grouping - Run subset of test cases depending on specific environment variables HOT 8
- Thread context classloader not reset between tests HOT 1
- Cross site scripting HOT 1
- How to test Redis Time out exception for @Cacheable method with Junit+ Spring integration test HOT 3
- Make Assert failNotEquals public HOT 1
- Assert error messages are not clear HOT 2
- Exception handling of suite() method breaks Jenkins JUnit test history reporting HOT 6
- Add support for "dynamic" default runner selection via system property HOT 8
- When will a new version of junit be released? HOT 1
- JUnitCore could not invoke test HOT 1
- Strange links on "Download and Install" page HOT 1
- junit-4.13.2 compilation error with java 21 HOT 4
- Treat org.opentest4j.TestAbortedException the same as AssumptionViolatedException HOT 4
- Which junit version supports Java 17 ? HOT 2
- Assert check not consistent HOT 9
- Receiving excessively long build DEBUG logs after updating maven-surefire-plugin from 2.22.2 to 3.3.0 HOT 1
- Refactoring Confirmation for Replace ‘expected’ Attribute with Try-Catch HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from junit4.