Python 当Unittest未执行时,鼻子测试失败

Python 当Unittest未执行时,鼻子测试失败,python,nose,unit-testing,Python,Nose,Unit Testing,我们看到pythonnose测试和unittest的结果之间有一个奇怪的差异。以下是导致问题的代码,特别是最后一行: import logging class ClassThatLogsBadly: log = logging.getLogger(__name__) def method_that_logs_badly(self): self.log.error('A message', 'Another string') return ('I

我们看到pythonnose测试和unittest的结果之间有一个奇怪的差异。以下是导致问题的代码,特别是最后一行:

import logging

class ClassThatLogsBadly:
    log = logging.getLogger(__name__)

    def method_that_logs_badly(self):
        self.log.error('A message', 'Another string')
        return ('I ran')
上面的
log
是从Python的日志库中检索的,调用时会产生问题,原因如下(从Python库:
logging/\uuuu init\uuuuu.py:328
):

如您所见,它试图将另一个字符串拼接到消息,但后者没有要填充的有效插槽(类型为
%s
),因此无法执行此操作。这是一个解决方案,解决方案是在记录器之外格式化您的内容。然而,我们的问题是测试,以确保这样做

对使用unittest或py.test调用日志库的代码运行测试不会导致失败。使用nose运行相同的测试会导致错误,并且测试失败。我们的大多数构建工作都是围绕py.test库构建的,不让这个测试失败是我们关心的:我们不确定这是否是出于某种原因的预期行为,这些库之间的处理之间的根本区别是什么,以及通常如何处理它

我们正在使用Python3.4。以下是运行此代码的示例测试:

import logging
import unittest

from mycode import ClassThatLogsBadly

class TestClassThatLogsBadly(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_method_that_logs_badly(self):
        clz = ClassThatLogsBadly()
        result = clz.method_that_logs_badly()
        self.assertEquals('I ran', result)

由于日志记录配置是全局的,为了正确使用日志记录功能,您必须正确配置日志记录。在您的特定情况下,没有在根级别配置处理程序,也没有为
self.log
配置处理程序,因此不会发出任何日志消息(只是“没有为记录器“mycode”找到处理程序”)。此消息旨在指示日志记录配置中存在错误,因为您的日志记录树如下所示:

<--""
   Level WARNING
   |
   o<--"mycode"
       Level NOTSET so inherits level WARNING

您能再指定一点吗?我正在类中定义basicConfig并捕获处理程序,在测试记录器类(测试使用Pydev test和普通unittest运行)时,nose错误仍然存在。
<--""
   Level WARNING
   |
   o<--"mycode"
       Level NOTSET so inherits level WARNING