医生的嘲笑

2024-04-19 21:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个在网络上调用的Python库。在编写文档时,我想以doctest的形式提供一个示例:

class Endpoint:                                                       
    """RPC endpoint representation for a service.                     

        >>> from ankhor import Endpoint                               
        >>> e = Endpoint("_hello_service._tcp.example.com")                 
        >>> e.say_hello(name="John Doe")
        'hello, John Doe!'                             
        >>>                                                           
    """

当运行doctest时,这显然会失败,因为example.com域不存在。我想通过模拟Endpoint类使用的解析器,并在服务启动之前启动一个示例服务,使这个测试通过。在

我很明显可以用这样的方法:

^{pr2}$

但这极大地扰乱了示例代码。在

因此,最终的问题是:我如何使第一段示例代码的整洁性与后一段代码的行为相同(后者同时模拟了服务和发现)?在

注意,这个问题与Using Mocks inside Doctests?不同,后者的目标是使用一个mock;这个问题的目标是保持示例可读,同时仍然可以运行。在

好处:在第二个示例中,我必须将测试类放在Python主模块树中。如果它们只在运行doctest时加载就好了。在


Tags: 代码文档网络com示例hello目标example