【问题标题】:pytest to insert caplog fixture in test methodpytest 在测试方法中插入 caplog 夹具
【发布时间】:2018-05-16 14:44:13
【问题描述】:

我有以下 pytest 测试类:

class TestConnection(AsyncTestCase):
      '''Integration test'''

      @gen_test
      def test_connecting_to_server(self):
          '''Connecting to the TCPserver'''
          client = server = None
          try:
              sock, port = bind_unused_port()
              with NullContext():
                  server = EchoServer()
                  server.add_socket(sock)
              client = IOStream(socket.socket())

              #### HERE I WANT TO HAVE THE caplog FIXTURE

              with ExpectLog(app_log, '.*decode.*'):
                  yield client.connect(('localhost', port))
                  yield client.write(b'hello\n')
                  # yield client.read_until(b'\n')
                  yield gen.moment
                  assert False
          finally:
              if server is not None:
                  server.stop()
              if client is not None:
                  client.close()

在这个类中,ExpectLog 显然不起作用,所以在 pytest 的文档中挖掘了一天后,我发现有一个 caplog 固定装置,您可以将其插入到您的方法中以访问捕获的日志。如果我有一个添加 caplog 参数的测试函数,它似乎可以工作,但是如何使 caplog 固定装置在上述测试类的方法中可用?

【问题讨论】:

    标签: python tdd pytest


    【解决方案1】:

    虽然您不能将fixture 作为参数传递给unittest 测试方法,但您可以将它们作为实例属性注入。示例:

    # spam.py
    import logging
    
    def eggs():
        logging.getLogger().info('bacon')
    

    测试spam.eggs()

    # test_spam.py
    import logging
    import unittest
    import pytest
    import spam
    
    
    class SpamTest(unittest.TestCase):
    
        @pytest.fixture(autouse=True)
        def inject_fixtures(self, caplog):
            self._caplog = caplog
    
        def test_eggs(self):
            with self._caplog.at_level(logging.INFO):
                spam.eggs()
                assert self._caplog.records[0].message == 'bacon'
    

    【讨论】:

    • 您可以将它们作为类属性注入 — 实例属性?
    • @phd 哎呀,你完全正确!更新了文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多