0

私はPythonに少し慣れていないので、ここやインターネット上のどこにも見つからないように見えるエラーに悩まされています。ただし、単純なものかもしれません:

「コントローラー」クラスのメソッドをテストしたい魔女のユニットテストクラスがあります。単体テスト クラスは次のようになります。

import unittest
from Controller import Controller

class ControllerUnitTests(unittest.TestCase):

    def test_no_ants_must_be_in_own_dead_ants_list(self):
        controller = Controller()
        self.assertTrue(controller.__ourBots[0] is None)

if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

コントローラー クラス (ourBots、リスト) の属性にアイテムが含まれていないかどうかを確認しているだけです。

コードを実行すると、次のエラーが表示されます。

Finding files... done.
Importing test modules ... done.

======================================================================
ERROR:   test_no_ants_must_be_in_own_dead_ants_list
(ControllerUnitTests.ControllerUnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\rgroenve\Python\KamikazeMieren\src\ControllerUnitTests.py", line 22, in   test_no_ants_must_be_in_own_dead_ants_list
self.assertTrue(controller.__ourBots[0] is None)
AttributeError: Controller instance has no attribute '_ControllerUnitTests__ourBots'

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

私のコントローラークラスではなく、独自のクラス内で属性を検索しているようです。理由と方法はわかりませんが。

コントローラ クラスの上部は次のようになります。

class Controller:

__priority = 0
__ourBots = []

def __init__(self):
    pass

これを修正する方法について何か考えはありますか?

4

1 に答える 1

2

先頭にアンダースコアが 2 つあるメンバーは、Python の「プライベート」変数です。外部から簡単にアクセスできないように、名前の変更を使用します

単体テストのメンバーの名前をマングルされた名前に変更するか (これは非常に醜い)、できればクラスの非「プライベート」インターフェースを使用する必要があります。

于 2013-04-15T10:06:28.120 に答える