Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How enable ellipsis when calling Python doctest?

Tags:

In Python (3.3.2) doctest, ellipsis (...) can match any string. So, for the code below

def foo():     """     >>> foo()     hello ...     """     print("hello world") 

when running doctest it shouldn't raise any error. But

$ python -m doctest foo.py  ********************************************************************** File "./foo.py", line 3, in foo.foo Failed example:     foo() Expected:     hello ... Got:     hello world ********************************************************************** 1 items had failures:    1 of   1 in foo.foo ***Test Failed*** 1 failures. 

What I must do to enable the ellipis? As far as I can tell it is disable by default.

I know that add # doctest: +ELLIPSIS, as in the code below, solve it, but I like to enable ellipsis for all tests.

def foo():     """     >>> foo() # doctest: +ELLIPSIS     hello ...     """     print("hello world") 
like image 470
Raniere Silva Avatar asked Jun 13 '13 16:06

Raniere Silva


People also ask

How do I run Python doctest from command line?

Right click on a blank space in the python code, and there is a menu option to run all the Doctests found in the file, not just the tests for one function.

Can we handle unpredictable output using doctest?

When the tests include values that are likely to change in unpredictable ways, and where the actual value is not important to the test results, you can use the ELLIPSIS option to tell doctest to ignore portions of the verification value.


1 Answers

You can pass in optionflags to the testmod method, but this requires you to run the module itself instead of the doctest module:

def foo():     """     >>> foo()     hello ...     """     print("hello world")  if __name__ == "__main__":     import doctest     doctest.testmod(verbose=True, optionflags=doctest.ELLIPSIS) 

Output:

$ python foo.py Trying:     foo() Expecting:     hello ... ok 1 items had no tests:     __main__ 1 items passed all tests:    1 tests in __main__.foo 1 tests in 2 items. 1 passed and 0 failed. Test passed. 
like image 67
andersschuller Avatar answered Oct 02 '22 08:10

andersschuller