Python 日志中的通配符。签入testfixtures

Python 日志中的通配符。签入testfixtures,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我正在使用testfixerslog.check()验证日志的输出。我的日志语句包含会话和持续时间等可变部分。例如: 2014-02-13T12:04:40.013822 user=user action=do_x session=4a5869aa-f581-4263-a567-918b792587e5 duration=200 我的log.check() ... log.check( ('root', 'INFO', '2014-02-13T12:04:40.01

我正在使用testfixers
log.check()
验证日志的输出。我的日志语句包含会话和持续时间等可变部分。例如:

2014-02-13T12:04:40.013822 user=user action=do_x session=4a5869aa-f581-4263-a567-918b792587e5 duration=200
我的
log.check()

...
log.check(
              ('root', 'INFO', '2014-02-13T12:04:40.013822 user=user action=do_x  session=4a5869aa-f581-4263-a567-918b792587e5 duration=200'),
...
是否可以检查第一部分,但允许第二部分使用通配符

@编辑

@威尔·哈特表示歉意,目前的问题是我的日志声明与我的预期不符。我的日志行由静态文本(键)和变量(值)组成。问题是有些值是在方法中生成的,比如session_id。因此我无法编写有意义的期望值,因为它永远不会与方法中生成的log语句匹配

我所追求的几乎是一个“包含”检查,以验证我知道的那个些值的存在是静态的,我可以模拟


实际上,我离开了TestFixture,尝试用Mock来实现这一点,方法是模拟我的记录器,然后调用assert_called_with(“var1=%s var2=%s var3=s%”,var1,var2,var3),但问题仍然存在,如果var1和var2是从方法调用返回的值,我可以模拟它们,但假设var3是一个时间戳。这是在方法内部生成的,所以在我的测试中,我不想断言val3的值。在Java中,您可以使用与任何值匹配的任何()。我在Python中找不到任何等价的东西。

最好的方法是不使用TestFixture,而是模拟我的记录器并传递给类构造函数,以便我可以模拟它

因此,我的日志语句如下所示:

self.logger.info("%s user=%s action=%s nodegroup=%s session=%s", datetime.datetime.now().isoformat(), options.username, options.action, options.nodegroup, str(session_id))
在测试中,我可以验证输出,以便:

action_log_text = '%s user=%s action=%s nodegroup=%s session=%s'
fin_log_text = '%s %s user=%s action=%s nodegroup=%s session=%s duration=%s'

...

calls = [call(self.action_log_text, ANY, options.username, options.action, options.nodegroup, ANY),
                 call(self.fin_log_text, ANY, '[FIN]', options.username, options.action, options.nodegroup, ANY, ANY)]

self.logger.info.assert_has_calls(calls)

事实证明,pythonmock具有任何匹配任何内容的属性。很好。

您好-我可能会错过它,因为我对TestFixture不太熟悉,但您的问题似乎有点不清楚-什么不起作用,您希望发生什么,以及哪些是“第一”和“第二”部分?