python nosetests AssertionError: None != 'hmmm...'
python nosetests AssertionError: None != 'hmmm...'
下面是我正在尝试的测试 运行:
def test_hmm_method_returns_hmm(self):
#set_trace()
assert_equals( orphan_elb_finder.hmm(), 'hmmm...')
当我 运行 代码时,我得到以下输出:
D:\dev\git_repos\platform-health\tests\unit\test_orphan_elb_finder>nosetests
.F
======================================================================
FAIL: test_hmm_method_returns_hmm (test_orphan_elb_finder.test_basic.BasicTestSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\dev\git_repos\platform-health\tests\unit\test_orphan_elb_finder\test_basic.py", line 18, in test_hmm_method_returns_hmm
self.assertEqual(orphan_elb_finder.hmm(), 'hmmm...')
AssertionError: None != 'hmmm...'
-------------------- >> begin captured stdout << ---------------------
hmmm...
--------------------- >> end captured stdout << ----------------------
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=1)
似乎是 orphan_elb_finder.hmm 结果为 None。这很奇怪,因为当我手动取消注释 set_trace 和 运行 命令时,它会给我正确的输出:
-> assert_equals( orphan_elb_finder.hmm(), 'hmmm...')
(Pdb) orphan_elb_finder.hmm()
hmmm...
但是当我在调试器中尝试 运行 相同的断言时:
(Pdb) assert_equals(orphan_elb_finder.hmm(), 'hmmm...')
hmmm...
*** AssertionError: None != 'hmmm...'
我感觉这与 stdout 的使用方式有关,但我对如何查找更多信息/解决此问题有点迷茫。
下面是 orphan_elb_finder 方法:
# -*- coding: utf-8 -*-
def get_hmm():
"""Get a thought."""
return 'hmmm...'
def hmm():
"""Contemplation..."""
print get_hmm()
如有任何帮助,我们将不胜感激
更新:
所以在 Blckknght 响应之后,我尝试调用 get_hmm 而不是 hmm()。但是当我尝试调用该方法时,出现以下错误
assert_equals(orphan_elb_finder.get_hmm(), 'hmmm...')
AttributeError: 'module' object has no attribute 'get_hmm'
然后我尝试检查可用的方法
(Pdb) dir(orphan_elb_finder)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'core', 'hmm']
似乎出于某种原因,下面的模块没有显示 get_hmm() 方法?
更新 2:
知道是怎么回事了。在我的 orphan_elb_finder 包里面 init.py 我有
from .core import hmm
改为
from .core import get_hmm
它似乎奏效了。不知何故,我认为包构造的作者将 get_hmm 缩进为私有方法。不确定如果是这种情况,我将如何测试它 get_hmm returns None?
与get_hmm
方法不同,hmm
方法没有return
语句。它 print
是字符串 "hmmm..."
,但 return 是 None
.
比较调用 get_hmm()
和调用 hmm()
。前者将打印带有引号的 'hmmm...'
。那是因为它正在 returning 字符串,并且交互式控制台正在打印 return 值的 repr
。相反,当您调用 hmm()
时,它会自己打印(不带引号),然后 returns None
(未指定其他内容时的默认 return 值).当 return 值为 None
时,交互式控制台会跳过打印出 repr
的值,因此没有额外打印任何内容。
>>> get_hmm()
'hmmm...'
>>> hmm()
hmmm...
下面是我正在尝试的测试 运行:
def test_hmm_method_returns_hmm(self):
#set_trace()
assert_equals( orphan_elb_finder.hmm(), 'hmmm...')
当我 运行 代码时,我得到以下输出:
D:\dev\git_repos\platform-health\tests\unit\test_orphan_elb_finder>nosetests
.F
======================================================================
FAIL: test_hmm_method_returns_hmm (test_orphan_elb_finder.test_basic.BasicTestSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\dev\git_repos\platform-health\tests\unit\test_orphan_elb_finder\test_basic.py", line 18, in test_hmm_method_returns_hmm
self.assertEqual(orphan_elb_finder.hmm(), 'hmmm...')
AssertionError: None != 'hmmm...'
-------------------- >> begin captured stdout << ---------------------
hmmm...
--------------------- >> end captured stdout << ----------------------
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (failures=1)
似乎是 orphan_elb_finder.hmm 结果为 None。这很奇怪,因为当我手动取消注释 set_trace 和 运行 命令时,它会给我正确的输出:
-> assert_equals( orphan_elb_finder.hmm(), 'hmmm...')
(Pdb) orphan_elb_finder.hmm()
hmmm...
但是当我在调试器中尝试 运行 相同的断言时:
(Pdb) assert_equals(orphan_elb_finder.hmm(), 'hmmm...')
hmmm...
*** AssertionError: None != 'hmmm...'
我感觉这与 stdout 的使用方式有关,但我对如何查找更多信息/解决此问题有点迷茫。
下面是 orphan_elb_finder 方法:
# -*- coding: utf-8 -*-
def get_hmm():
"""Get a thought."""
return 'hmmm...'
def hmm():
"""Contemplation..."""
print get_hmm()
如有任何帮助,我们将不胜感激
更新:
所以在 Blckknght 响应之后,我尝试调用 get_hmm 而不是 hmm()。但是当我尝试调用该方法时,出现以下错误
assert_equals(orphan_elb_finder.get_hmm(), 'hmmm...')
AttributeError: 'module' object has no attribute 'get_hmm'
然后我尝试检查可用的方法
(Pdb) dir(orphan_elb_finder)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'core', 'hmm']
似乎出于某种原因,下面的模块没有显示 get_hmm() 方法?
更新 2:
知道是怎么回事了。在我的 orphan_elb_finder 包里面 init.py 我有
from .core import hmm
改为
from .core import get_hmm
它似乎奏效了。不知何故,我认为包构造的作者将 get_hmm 缩进为私有方法。不确定如果是这种情况,我将如何测试它 get_hmm returns None?
与get_hmm
方法不同,hmm
方法没有return
语句。它 print
是字符串 "hmmm..."
,但 return 是 None
.
比较调用 get_hmm()
和调用 hmm()
。前者将打印带有引号的 'hmmm...'
。那是因为它正在 returning 字符串,并且交互式控制台正在打印 return 值的 repr
。相反,当您调用 hmm()
时,它会自己打印(不带引号),然后 returns None
(未指定其他内容时的默认 return 值).当 return 值为 None
时,交互式控制台会跳过打印出 repr
的值,因此没有额外打印任何内容。
>>> get_hmm()
'hmmm...'
>>> hmm()
hmmm...