【问题标题】:How to test a single docstring using pytest --doctest-modules?如何使用 pytest --doctest-modules 测试单个文档字符串?
【发布时间】:2022-06-11 03:55:51
【问题描述】:

我知道使用 pytest 的单个测试可以使用 pytest test.py::test_single 来实现。是否有类似的方法可以选择使用pytest --doctest-modules mymodule.py 运行的单个文档字符串测试?这不起作用:pytest --doctest-modules mymodule.py::MyClass.foo

例如:

# mymodule.py
class MyClass:
    """
    My Class.

    >>> print("Some testing here")
    Some testing here
    """

    def foo(self):
        """
        Print foo.

        >>> myclass = MyClass()
        >>> myclass.foo()
        foo
        """
        print("foo")

【问题讨论】:

    标签: python pytest doctest


    【解决方案1】:

    TL;DR

    在测试名称中使用模块名称pytest --doctest-modules mymodule.py::mymodule.MyClass.foo

    完整答案

    使用pytest --doctest-modules -v mymodule.py 提供了确定如何选择性地运行测试的必要信息。

    扩展问题中的示例以与其他类型的 pytest 测试进行对比:

    # mymodule.py
    class MyClass:
        """
        My Class.
    
        >>> print("Some testing here")
        Some testing here
        """
    
        def foo(self):
            """
            Print foo.
    
            >>> myclass = MyClass()
            >>> myclass.foo()
            foo
            """
            print("foo")
    
    
    class TestClass:
        def test_inside_class(self):
            assert True
    
    
    def test_normal_test():
        assert True
    

    运行 pytest --doctest-modules -v mymodule.py 会显示 pytest 收集的测试名称。

    collected 4 items                                                                   
    
    mymodule.py::mymodule.MyClass PASSED                                          [ 25%]
    mymodule.py::mymodule.MyClass.foo PASSED                                      [ 50%]
    mymodule.py::TestClass::test_inside_class PASSED                              [ 75%]
    mymodule.py::test_normal_test PASSED                                          [100%]
    

    请注意,根据收集的测试类型,文档测试名称的格式会有所不同。从 doctests 收集的测试还具有模块名称。

    如果我们运行pytest --doctest-modules mymodule.py::mymodule.MyClass.foo -v,它将只运行所需的测试:

    collected 1 item                                                                    
    
    mymodule.py::mymodule.MyClass.foo PASSED                                      [100%]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2017-08-08
      • 2022-08-19
      相关资源
      最近更新 更多