Comments (4)
Can you provide a detailed example of the problem with what you are expecting and what you are getting?
from javahamcrest.
Well, maybe. Consider this code sample:
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.CoreMatchers.startsWith;
import static org.hamcrest.collection.IsIn.isOneOf;
import static org.junit.Assert.assertThat;
import org.hamcrest.Matcher;
import org.junit.Test;
public class MatcherExampleTest {
@SuppressWarnings(“unchecked”)
@test
public void testAll() {
final String value = “Red”;
final Matcher blueOrGreen = isOneOf(“Blue”, “Green”);
assertThat(value, allOf(startsWith(“R”), blueOrGreen));
}
@Test
public void testBad() {
final String value = “Red”;
final Matcher<String> blueOrGreen = isOneOf(“Blue”, “Green”);
assertThat(value, blueOrGreen);
}
}
I would like the failure output for both of these tests to be the same.
The /reason/ is this: We have a large tree of "objects". They're really map-like and list-like. We're almost testing for equality, but there are few fields that are about equality. We've built a framework for assembling a tree of matchers where when the matcher fails, it describes the "tree-path" to that particular "field" that failed. We're not currently using #allOf. The reason (if my memory serves correctly) is that the Expected phrase is so overwhelming noisy to be of no value, but that's where we've been able to put the "tree-path" to identify the point of failure.
Our case might be an extremely non-standard way. Even our solution might be very bad. But when in the example above, it fails for being not being "Blue or Green", I don't care that I expect it start with "R".
(Please forgive that the example in testAll cannot be made to pass).
from javahamcrest.
In theory, describeMismatch should work for this case, but allOf describes only the first mismatch and returns: https://github.com/hamcrest/JavaHamcrest/blob/master/hamcrest-core/src/main/java/org/hamcrest/core/AllOf.java#L27.
Fore more user-friendly error messages, it would be more useful to aggregate all mismatches.
from javahamcrest.
See also the different but related #31 "AllOf diagnostics inaccurate".
There are two issues with allOf. Firstly, that the mismatch description is reliably incomprehensible. Secondly, that only the first mismatch is described.
There's some discussion in #31 pointing out that we have to be careful about verbosity, because when you compose verbose matchers, things can get out of hand.
However, if i could find a way to improve allOf without driving up the verbosity (maybe using @npryce's suggestion), would a PR be considered?
I realise that this comment should probably be a separate issue.
from javahamcrest.
Related Issues (20)
- containsInAnyOrder incorrectly identifies differences in identical collections HOT 1
- Hamcrest 3.0? HOT 2
- You should be able to specify a lambda to return a reason
- Conflicting license declarations HOT 1
- Not sure why assertThat() doesn't work in this case HOT 2
- 301 Moved Permanently
- assertThat(this.object, hasProperty("booleanName")) fails to match boolean types and renames the property HOT 1
- The matcher contains() is misleading HOT 2
- FR: Matching maps with various type HOT 1
- oss-fuzz integration
- Participitation in Hacktoberfest?
- HasProperty Matcher doesn't work with Java Records HOT 1
- assertThat(Int::class.java, typeCompatibleWith(Number::class.java)) in kotlin always fails
- hamcrest matching on actual empty list fails with nosuchmethoderror HOT 1
- Test output Alignment
- record version fails the hasProperty HOT 1
- has property fails with non public class.. not sure if this correct as per java standards of property
- Double "close-to" matcher that uses the ULP.
- GraalVM Native Image support HOT 3
- Inquiry about Project Activity and Future Plans HOT 13
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 javahamcrest.