1

我是通过 LPTHW 工作的新手这是它的链接。在 ex48,我得到了很多代码作为单元测试,我应该编写相应的 my_code 来进行测试(使用nosetests,对不起,这句话中有很多测试。)

这是我的代码:

class lexicon(object):

    def __init__(self):
    #some initial stuff.

    def scan(self,stuff):
    #some cool code.

这是 test.py 文件

from nose.tools import*
from Ex48.code import lexicon

def test_directions():    

    assert_equal(lexicon.scan("north"), [('direction', 'north')])
    ...#Unimportant details the above is enough.

但是,当我运行鼻子测试时,我收到以下错误:

Traceback (most recent call last):
    File "c:\python31\lib\site-packages\nose'case.py", line 197, i runTest
    ... line x, in test_directions
    assert_equal(lexicon.scan("north"), [('direction', 'north')])
TypeError: scan() takes exactly 2 positional arguments (1 given)

这很奇怪,因为这两个论点之一是自我论点,我认为不应该给出它。

为了解决这个问题,我尝试过:

@staticmethod
def scan(self,stuff):

但这给了我相同的 typeError

接下来我尝试了:

assert_equal(lexicon.__init__(self).scan(...)

但这也不起作用(我认为.init (self) 应该在另一个类中使用,而不是只在词典中使用,而不是在 main 中)。

我最终决定:

lexicon1=lexicon()
def test_directions():    
    assert_equal(lexicon1.scan("north"), [('direction', 'north')])

但这不是练习应该如何进行的!

PS:我没有包括整个追溯,因为它可能没有必要(而且已经很晚了)。我没有包含我的部分代码,因为我确信它可以正常工作并且不会导致错误!

4

1 回答 1

2

我认为你这样做的方式(创建一个实例,然后使用它的方法——你的例子是 lexicon1)很好,对吧?

如果您想以第一种方式进行操作,您是否尝试过:

@classmethod
def scan(self, stuff):

我也是新手(刚刚完成练习49),所以也许其他人可以回答得更好。不过,很好奇 @classmethod 装饰器是否符合您的要求。

于 2012-08-01T02:22:53.283 回答