Open jstrachan opened 8 years ago
am happy to submit a PR for the above if you like
I'm not sure I want to switch to navigation assertions by default because it makes simple usage less direct, in your example one now needs two methods completion to get to the assertion. I believe these simple usages are a majority.
What we could do is add some configuration to generate navigation assertions (either as additional assertions or being the default).
thoughts ?
having a configuration option to enable the navigation methods would be really nice - it'd be easier for folks that them maintaining their own templates
A progress note : this much more work than I expected, the main thing is to resolve the correct assert type got any given type. This implies some (well justified) refactoring.
One cannot just find the assert type by adding Assert
and changing the package to org.assertj.core.api
, think of Set
, that would give org.assertj.core.api.SetAssert
whereas it should have been org.assertj.core.api.IterableAssert
.
No big deal, just lot of work.
Moin!
I am using assertj since fest times and it's a great piece of work! I want to do navigation style asserting on some complex compiler abstract syntax tree. Until i make up my mind of how to structure it i am writing the initial assert classes by hand. I use the appoach of extending the standard asserts for easy access. But what i found is that i want and need the standard methods but my custom navigation methods get lost in the huge list of inherited methods. Can we put them into different "namespaces" and enhance assertj to switch between them for composition classes?
assertThat(person).switchToStandard().isInstanceOf(X.class).switchToDomain().name().isEqualTo(...)
Opinions?
Cal
P.S. And yes it must be the names above. ;-)
Once this PR is merged and issue fixed https://github.com/joel-costigliola/assertj-assertions-generator/issues/67 along with the NavigationListAssert class in assertj-core: https://github.com/joel-costigliola/assertj-core/issues/641 it would be easy to switch the OOTB templates in the generator to use the 'navigation' model approach.
So that for every property of an object we generate exactly one navigation method that lets users chain assertions together; reusing all the methods from ListAssert and NavigationListAssert for iterable properties or the custom typed assertions for other properties.
This would result in much smaller code generated for the assertion classes and much more power. The only downside is some of the current methods would be a tad more verbose.
e.g. for a generated assertion class with a name property the current generated code would be:
Ditto for iterable properties right now we generate a few methods which are mostly already included in ListAssert. e.g. all these assertion methods are available on any generated iterable property method: https://github.com/jstrachan/assertj-core/blob/7b1d079edeb5ac984cebbed77a65025718ee7673/src/test/java/org/assertj/core/navigation/ListNavigation_Test.java#L56-L62
Removing the old generated methods would break folks code I guess; so maybe we should add a flag to switch to the new more concise model?
If you are interested; here are the 2 new templates (which need minor tweaks to reuse the https://github.com/joel-costigliola/assertj-core/issues/641 code):