It's fairly common that only part of the output of a test is actually relevant to determining whether the test passes. By using the +ELLIPSIS
directive, you can make doctest
treat the text ...
(called an ellipsis) in the expected output as a wildcard that will match any text in the output.
When you use an ellipsis, doctest
will scan until it finds text matching whatever comes after the ellipsis in the expected output, and continue matching from there. This can lead to surprising results such as an ellipsis matching against a 0-length section of the actual output, or against multiple lines. For this reason, it needs to be used thoughtfully.
We're going to use the ellipsis in a few different tests to better get a feel of how it works. As an added bonus, these tests also show the use of doctest
directives.
Add the following code to your test.txt
file:
Next up, we're exploring the ellipsis. >>> sys.modules # doctest: +ELLIPSIS {...'sys': <module 'sys' (built-in)>...} >>> 'This is an expression that evaluates to a string' ... # doctest: +ELLIPSIS 'This is ... a string' >>> 'This is also a string' # doctest: +ELLIPSIS 'This is ... a string' >>> import datetime >>> datetime.datetime.now().isoformat() # doctest: +ELLIPSIS '...-...-...T...:...:...'
The tests all pass, where they would all fail without the ellipsis. The first and last tests, in which we checked for the presence of a specific module in sys.modules
and confirmed a specific formatting while ignoring the contents of a string, demonstrate the kind of situation where ellipsis is really useful, because it lets you focus on the part of the output that is meaningful and ignore the rest of the test. The middle tests demonstrate how different outputs can match the same expected result when ellipsis is in play.
Look at the last test. Can you imagine any output that wasn't an ISO-formatted time stamp, but that would match the example anyway? Remember that the ellipsis can match any amount of text.
3.136.17.12