0

4つのテストクラスを含むテストファイルがunittestあり、それぞれが1つの特定のクラスでテストを実行する役割を果たします。各テストクラスは、まったく同じメソッドset-upを使用します。teardownこのset-upメソッドは比較的大きく、約20の異なる変数を開始しますが、teardownメソッドはこれらの20の変数を初期状態にリセットするだけです。

これまで、4つのsetUpクラスのそれぞれに20個の変数を入れてきました。これは機能しますが、保守は簡単ではありません。1つの変数を変更する場合は、4つのsetUpメソッドすべてで変更する必要があります。しかし、より洗練されたソリューションの検索は失敗しました。理想的には、20個の変数を一度入力し、4つのメソッドのそれぞれで呼び出してから、setup各テストメソッドの後でそれらを破棄したいと思います。この目的を念頭に置いて、変数を別のモジュールに入れ、これを各setUpにインポートしようとしましたが、もちろん、変数はセットアップメソッドでのみ使用できます(さらに、正確な理由に指を置くことはできませんでしたが、これは、潜在的に問題が発生しやすい方法のように感じました

from unittest import TestCase

class Test_Books(TestCase):
    def setup():
        # a quick and easy way of making my variables available at the class level
        # without typing them all in

    def test_method_1(self):
        # setup variables available here in their original state
        # ... mess about with the variables ...
        # reset variables to original state

    def test_method_2(self):
        # setup variables available here in their original state
        # etc...

    def teardown(self):
        # reset variables to original state without having to type them all in



class Books():
    def method_1(self):
        pass

    def method_2(self):
        pass
4

2 に答える 2

1

私がすることは、4つのテストクラスをそれぞれ、それ自体がTestCaseのサブクラスである1つの基本テストクラスのサブクラスにすることです。次に、setipとteardownを基本クラスに入れ、残りを他のクラスに入れます。

例えば

class AbstractBookTest(TestCase):
   def setup():
      ...

class Test_Book1(AbstractBookTest):
   def test_method_1(self):
     ...

別の方法は、分割の理由を示さない限り、ここではもう少し論理的であると思われる4つではなく1つのクラスを作成することです。

于 2012-09-07T10:21:17.517 に答える
1

別の方法は、20個の変数を別のクラスに入れ、クラスの値を設定してから__init__、データにclass.variableとしてアクセスすることです。したがって、変数sを設定する唯一の場所で__init__あり、コードは複製されません。

class Data:
    def __init__(self):
        data.x= ...
        data.y = ....

class Test_Books(TestCase):
    def setup():
        self.data = Data()

    def test_method_1(self):
       value = self.data.x   # get the data from the variable

このソリューションは、20個のデータが相互に関連している場合に意味があります。また、20個のデータがある場合、それらは関連していると予想されるため、テストだけでなく実際のコードで組み合わせる必要があります。

于 2012-09-07T10:30:18.690 に答える