0

ここに問題のミニバージョンがあります

a = [[1,2,3][0,0,0]]
b = [[1,0,1][0,0,0]]
c = [[0,0,0][1,0,1]]

したがって、レベル 1 が [] でレベル 2 が [[]] の場合、私がやろうとしているのは、リストをテストして、レベル 2 の一致 (順序に関係なく) があるかどうかを確認することです。この場合、b、c は同等です。

私はユニットテストとノーズテストを使用してそれらを実行しています。あるテーブルを別のテーブルに対してテストしたい場合は、次のようにします。

関数 Truth() は私のテーブルを作成します

def test_table1_table2(self):
    for row in truth(1,3):
        self.assertIn(row,truth(2,4))

しかし、私の目標は、作成した他のすべてのテーブルに対してすべてのテーブルをテストすることです (約 20 および増加中)。うまくいかない問題がいくつかあります (ユニットテストのドキュメントやノーズテストを読む必要があるのか​​、それとも必要ないのかわかりません!)

私の推測では、より多くの for ループを使用して、これまでの可能性を引き出すことです。しかし、使用して

>>> nosetest 

とともに

assertIn 

最初のエラーで停止するだけですが、これは私が望んでいるものではありません。どのリストが同等であるか(順序やネストされたリストに関係なく)に関する情報をスキャンして収集する必要があります。多分私は何かを作成し、ユニットテストを忘れるべきですか?

私の好みの出力は次のようなものになります

table1 and table2 are not equivalent 
table1 and table2 are not equivalent

または、より便利で短い可能性があります

table1 and table10 are equivalent

これが私が現在持っているコードです。ほとんどすべてが整数であり、真理値表(ネストされたリスト)を作成する Truth() を期待しています:

114     def test_all(self):$                                                  |~                      
115         ''' will test all tables'''$                                      |~                      
116         for expression in range(self.count_expressions()):$               |~                      
117             num_var = count_vars(exp_choose(expression))$                 |~                      
118             for row in truth(expression, num_var):$                       |~                      
119                 for expression2 in range(self.count_expressions()):$      |~                      
120                     num_var2 = count_vars(exp_choose(expression2))$       |~                      
121                     for row2 in truth(expression2, num_var2):$            |~                      
122                         self.assertIn(row, truth(expression2,num_var2))
4

3 に答える 3

0

このアプローチを試してください: テスト メソッド内のループの代わりに、テスト クラスの外側の外側のループを実行します。内部コードは、新しいテスト メソッドをテスト クラスに追加する必要があります。

例については、こちらを参照してください: Python で動的 (パラメーター化された) 単体テストを生成する方法は?

于 2012-05-16T08:43:40.623 に答える
0

より簡単なアプローチは、まさにこの目的のために設計されたunittest のassertItemsEqualを使用することです。OP が与えられた場合、sa、b、および c のネストされたリスト:

class CheckingEqualityIgnoreOrder(unittest.TestCase):
    def testAB(self):
        self.assertItemsEqual(a, b)
        #fails

    def testBC(self):
        self.assertItemsEqual(b, c)
        #passes

    def testAC(self):
        self.assertItemsEqual(a, c)
        #fails
于 2013-02-05T06:54:17.147 に答える