1

これがだまされているかどうかわからない。ここに行きます。

次のようなPythonコードを作成する必要があります。

class TestClass:
    def test_case(self):
     def get_categories(self):
      return [“abc”,”bcd”]
     # do the test here

次に、これらすべてのテストクラスをスキャンし、すべてのtest_case関数をロードし、get_categoriesを呼び出して、テストが特定の実行の対象グループに属しているかどうかを確認するテストエンジンクラスを用意します。

問題は、get_categoriesがtest_caseの属性として表示されず、手動で割り当てたとしても、

class TestClass:
    def test_case(self):
     def get_categories(self):
      return [“abc”,”bcd”]
     # do the test here
     test_case.get_categories = get_categories

これは、test_caseが最初に実行されたときにのみ発生し、私には遅すぎます。

この関数をクラスに含めることができない理由(または少なくとも関数ごとのレベルでも使用できるようにしたい理由)は、TestClassが複数のテストケースを持つことができるためです。これは既存のテストインフラストラクチャであり、カテゴリメカニズムが機能するため(重要性が低いカテゴリオン機能シナリオを除く)、書き直しは計画に含まれていません。

言語のトリックは大歓迎です。

4

2 に答える 2

0

ネストされた関数は、他のどの割り当てよりも属性にはなりません。

これがサポートされていない場合(そして古いスタイルのクラスを使用している場合)、テストインフラストラクチャが非常に奇妙なことをしていると思われますが、これを行うことができます。

class TestClass:
    def test_case(self):
        # ...

    def _get_categories(self):
        return [...]
    test_case.get_categories = _get_categories
    del _get_categories

クラス本体は、他のブロックと同様に実行可能コードです。

于 2013-02-27T02:27:36.270 に答える
0

必要なのはネストされたクラスです。関数はあなたがやろうとしていることをするようには作られていません、それであなたはワンランク上に移動しなければなりません。関数属性は主にマークアップとして使用されますが、クラスには必要なものを含めることができます。

class TestClass(object):
    class TestCase(object):
         @classmethod
         def get_categories(cls):
             return ['abc', 'efg']

@classmethodインスタンス化せずに使用できるように使用したことに注意してくださいTestCase()。実行したい場合は変更しますtest_case = TestCase()

于 2013-02-27T02:35:11.600 に答える