Testing dictionary results with doctest

Joe Strout joe at strout.net
Fri Oct 31 15:43:56 CET 2008

I love doctest -- the way it combines documentation with verification  
seems elegant and useful, and most of the time it's simple and easy to  

But I've run into a bit of a snag trying to test a method that returns  
a dictionary, because (of course) the order in which the dictionary  
pairs are printed may not match what I wrote as the expected result.   
For example, my doctest string is:

	>>> t = Template("The $object in $location falls mainly on the  
	>>> t.match( "The rain in Spain falls mainly on the train." )
	{'object': 'rain', 'location': 'Spain', 'subloc': 'train'}

But when I run it, I get:

> Failed example:
>     t.match( "The rain in Spain falls mainly on the train." )
> Expected:
>     {'object': 'rain', 'location': 'Spain', 'subloc': 'train'}
> Got:
>     {'subloc': 'train', 'object': 'rain', 'location': 'Spain'}

Now, you and I can see that the obtained results really do match the  
expected results, considered as a dictionary rather than as a string.   
But doctest doesn't see it that way.

What's the standard solution for this?  Should I iterate over the  
sorted keys and print those out instead?  Is there some built-in  
method somewhere that will print a dictionary in a reliable order?   
Does doctest have some special way to tell it to consider the result  
as a dictionary rather than a string?  Or something else?

- Joe

More information about the Python-list mailing list