2017-11-26 13 views
0

file-Aの変数を使用するfile-AのPythonメソッドをテストしようとしています。 マイfile-A方法は次のようになります。Python unittestのNameError

def rotate(self, rotation): 
    self.current_face = board.positions[(board.positions.index(self.current_face) + rotation) % 4] 

Note: This is inside class A-1 in file-A

file-Aためmainは次のようになります。私はfile-Aを実行したときに

ので
if __name__ == '__main__': 
    inp = Input("input.txt")  # create Input object 
    board = Board(inp.lines[0]) # create board object -----> NOTE 
    rover_objects(inp.lines[1:]) # create rover objects 
    process_and_print()   # process and print output 

、それは私はそれが仕事をしたい正確に同じように動作します。

class RoverTest(unittest.TestCase): 
    def setUp(self): 
     description = '1 2 N' 
     moves = 'LMLMLMLMM' 
     self.testRover = Rover(description, moves) 
    def test_coordinates(self): 
     self.testRover.rotate(rotation = 4) -----> Problem 
     self.assertEqual(self.testRover.current_face, 'N') 

問題があり、file-Arotate方法はfile-A Iでmainでオブジェクトboardを使用しています。今


は、私のような 私のテストコードが見えますdef rotate(self, rotation)file-Aでテストしようとしていますテストからの関数へのboardの渡し方がわかりません。

私は今、私のテストを実行する場合、私はエラーがスローされています:

NameError: name 'board' is not defined

どのように私はこのエラーを修正することができますか?

+0

「testRover」とは何ですか、定義されているのはどこですか? –

+0

あなたのメソッドは 'rotate'と呼ばれますが、あなたは' rotation'を呼び出しています。 – jordanm

+0

@DanielRoseman、すみませんでした。今すぐ確認してください、ありがとう。 –

答えて

3

既存の他のクラスに依存するクラスを作成する場合は、それらがグローバルに定義されていることを期待するのではなく、その依存関係を初期化の引数として受け入れるようにする必要があります。例:

class A1(object): 
    def __init__(self, inputfile): 
     self.inp = Input(inputfile) 
     self.board = Board(self.inp.lines[0]) 

    def rotate(self, rotation): 
     self.current_face = self.board.positions[(self.board.positions.index(self.current_face) + rotation) % 4] 

メインファイルとテストファイルの両方で、入力ファイルを渡すことでA1を直接インスタンス化できます。

これは単なる例です。 Boardオブジェクトをクラス外でインスタンス化し、直接渡すことができます。どちらの方法も問題ありません。重要な部分は、依存関係をすべて通過していることです。

+0

ありがとう。これは私が探していたものでした。 –