如何从测试文件创建模块

时间:2014-10-23 19:09:21

标签: python

编程世界中的新手学习使用Python编写代码下面的测试代码让我在尝试编写模块本身时遇到了问题,请高度赞赏如何编写代码的任何帮助。

from nose.tools import *
from glass import moviy


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

def test_verbs():
    assert_equal(lexicon.scan("go"), [('verb', 'go')])
    result = lexicon.scan("go kill eat")
    assert_equal(result, [('verb', 'go'),
                      ('verb', 'kill'),
                      ('verb', 'eat')])

def test_stops():
    assert_equal(lexicon.scan("the"), [('stop', 'the')])
    result = lexicon.scan("the in of")
    assert_equal(result, [('stop', 'the'),
                      ('stop', 'in'),
                      ('stop', 'of')])


def test_nouns():
    assert_equal(lexicon.scan("bear"), [('noun', 'bear')])
    result = lexicon.scan("bear princess")
    assert_equal(result, [('noun', 'bear'),
                      ('noun', 'princess')])

def test_numbers():
    assert_equal(lexicon.scan("1234"), [('number', 1234)])
    result = lexicon.scan("3 91234")
    assert_equal(result, [('number', 3),
                      ('number', 91234)])


def test_errors():
    assert_equal(lexicon.scan("ASDFADFASDF"), [('error', 'ASDFADFASDF')])
    result = lexicon.scan("bear IAS princess")
    assert_equal(result, [('noun', 'bear'),
                      ('error', 'IAS'),
                      ('noun', 'princess')])

1 个答案:

答案 0 :(得分:0)

你有一个黑盒子,你必须通过输入发现里面的内容。

这是TDD

背后的基本理念

像伊格纳西奥所说,你可以使用字典。它将通过测试。但它没有一个非常有用的实现,因为你不能拥有所有数字的密钥,例如。 它会做到这一点。但是不会在现实生活中发挥作用。

根据您的测试,您有一个词典对象。

class Lexicon(object):
    def __init__(self):
        pass  
    def scan(self, inputStr):

您注意到所有返回都是元组的向量。每个元组都是输入字符串中的单词。 所以你可以假设它被空间分裂了。

tokens = inputStr.split(" ")

创建一个矢量来保存答案:

answers = []

你可以从每个令牌开始猜测。

for token in tokens:

让我们首先尝试它是否是一个数字。

try:
   answers.append(("number", int(token)))
except:
   pass

最后你会回答答案

return answers

在此之后你可以运行数字测试:

lexicon = Lexicon()
test_numbers()

不会发生任何错误。

在此之后,您可以测试列表中的字符串。 首先在对象中创建列表。

class Lexicon(object):
    directions = [ "north", "south", "east", "west"]
    def __init__(self):
    ...

在扫描功能中,您可以测试令牌是否在路线列表中。

...
pass
if token in self.directions:
    answers.append(("direction",token))

现在运行:

lexicon = Lexicon()
test_numbers()
test_directions()

不会发生任何错误! 这个想法与其他价值观相似。

顺便说一下。如果你没有像class,tuple,dict这样的概念。我很高兴你看看here