cars_finder = stub(CarFinder()) when(cars_finder.count_by_brand).with_args( equal_to_ignoring_case(“bmw”)).then_return(120)
Hamcrest comes with a library of useful matchers. Here are some of the most important ones:
- anything – always matches, useful if you don’t care what the object under test is
- describedAs – decorator to adding custom failure description
- is – decorator to improve readability – see “Sugar”, below
- allOf – matches if all matchers match, short circuits (like Java &&)
- anyOf – matches if any matchers match, short circuits (like Java ||)
- not – matches if the wrapped matcher doesn’t match and vice versa
- equalTo – test object equality using Object.equals
- hasToString – test Object.toString
- instanceOf, isCompatibleType – test type
- notNullValue, nullValue – test for null
- sameInstance – test object identity
- hasProperty – test JavaBeans properties
- array – test an array’s elements against an array of matchers
- hasEntry, hasKey, hasValue – test a map contains an entry, key or value
- hasItem, hasItems – test a collection contains elements
- hasItemInArray – test an array contains an element
- closeTo – test floating point values are close to a given value
- greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo – test ordering
- equalToIgnoringCase – test string equality ignoring case
- equalToIgnoringWhiteSpace – test string equality ignoring differences in runs of whitespace
- containsString, endsWith, startsWith – test string matching
- A method called “matches” that returns a boolean value and it receives a parameter to be checked.
- Optionally, a constructor who gets what you need to make the match.
- Optionally, define value to “matcher_name” which prints a descriptive message of your matches in pyDoubles messages.
class IsTelephoneNumber(PyDoublesMatcher): matcher_name = "is telephone number" def __init__(self, format): self.defined_arg = format def matches(self, arg): return self._is_telephone_number_in_format(arg, self.defined_arg) def _is_telephone_number_in_format(self, telephone, format): .... assume this would implement some check...
With a little more work, you can support your matcher with pyDoubles and Hamcrest. You can find more information in the Hamcrest wiki.
The currently supported version of PyHamcrest is v1.5.
Finally, the method: “assert_that” as been renamed to “assert_that_method” to avoid conflicts with Hamcrest.
You can download the latest version of pyDoubles here: https://bitbucket.org/carlosble/pydoubles/downloads/