目录结构:
ex47/ ex47/ __init__.py game.py bin/ docs/ setup.py tests/ ex47_tests.py __init__.py
game.py文件:
class Room(object): def __init__(self, name, description): self.name = name self.description = description self.paths = {} def go(self, direction): return self.paths.get(direction, None) def add_paths(self, paths): self.paths.update(paths)
ex47_tests.py
# coding:utf-8 from nose.tools import * from ex47.game import Room def test_room(): gold = Room("GoldRoom", """This room has gold in it you can crab. There's a door to the north.""") assert_equal(gold.name, "GoldRoom") assert_equal(gold.paths, {}) def test_room_paths(): center = Room("Center", "Test room in the center.") north = Room("North", "Test room in the north.") south = Room("South", "Test room in the south.") center.add_paths({'north': north, 'south': south}) assert_equal(center.go('north'), north) assert_equal(center.go('south'), south) def test_map(): start = Room("Start", "You can go west and down a hole.") west = Room("Trees", "There are trees here, you can go east.") down = Room("Dungeon", "It's dark down here, you can go up.") start.add_paths({'west': west, 'down': down}) west.add_paths({'east': start}) down.add_paths({'up': start}) assert_equal(start.go('west'), west) assert_equal(start.go('west').go('east'), start) assert_equal(start.go('down').go('up'), start)
运行结果:
(lpthw) C:\Python37\Scripts\projects\ex47>nosetests ... ---------------------------------------------------------------------- Ran 3 tests in 0.034s OK
直接执行脚本ex47_tests.py时有如下报错:
(lpthw) C:\Python37\Scripts\projects\ex47\tests>python ex47_tests.py Traceback (most recent call last): File "ex47_tests.py", line 3, in <module> from ex47.game import Room ModuleNotFoundError: No module named 'ex47'
追踪原因就是 game.py路径未加到python搜索路径中
修改代码:
# coding:utf-8 from nose.tools import * import nose import sys sys.path.append("../ex47") from game import Room def test_room(): gold = Room("GoldRoom", """This room has gold in it you can crab. There's a door to the north.""") assert_equal(gold.name, "GoldRoom") assert_equal(gold.paths, {}) def test_room_paths(): center = Room("Center", "Test room in the center.") north = Room("North", "Test room in the north.") south = Room("South", "Test room in the south.") center.add_paths({'north': north, 'south': south}) assert_equal(center.go('north'), north) assert_equal(center.go('south'), south) def test_map(): start = Room("Start", "You can go west and down a hole.") west = Room("Trees", "There are trees here, you can go east.") down = Room("Dungeon", "It's dark down here, you can go up.") start.add_paths({'west': west, 'down': down}) west.add_paths({'east': start}) down.add_paths({'up': start}) assert_equal(start.go('west'), west) assert_equal(start.go('west').go('east'), start) assert_equal(start.go('down').go('up'), start) if __name__ == "__main__": nose.runmodule()
运行结果:(需更改路径运行)
(lpthw) C:\Python37\Scripts\projects\ex47\tests>nosetests ... ---------------------------------------------------------------------- Ran 3 tests in 0.001s OK (lpthw) C:\Python37\Scripts\projects\ex47\tests>python ex47_tests.py ... ---------------------------------------------------------------------- Ran 3 tests in 0.001s OK