5

関数またはラムダでの使用方法は理解してassertRaisesいますが、インスタンス メソッドで使用したかったのです。

たとえば、calculator無限精度演算を行うクラスがある場合、次のようにテストを記述します。

def setUp(self):
    self.calculator = calculator.calculator()

def test_add(self):
    self.assertRaises(TypeError, self.calculator.add, ['hello', 4])

self.calculator.addは呼び出し可能であり['hello', 4]、渡したい引数であるため、ただし、テストを実行すると、次の致命的なエラーが発生します。

TypeError: add() missing 1 required positional argument: 'num2'

インスタンスメソッドが呼び出されたときのように、 when is self.assertRaisescallingが最初の引数として渡されていないため、このエラーがスローされていると思います。これを修正するにはどうすればよいですか?self.calculator.addself

4

3 に答える 3

8

他の回答が言ったように、値を個別に渡す必要がありますが、より簡単に読み取ることができる代替手段は、次のwithステートメントを使用することです。

def test_add(self):
    with self.assertRaises(TypeError):
        self.calculator.add('hello', 4)

この方法を使用する場合は、ブロックassertRaises内に通常どおりコードを記述します。withこれは、より自然なコーディング方法であり、単一の関数呼び出しのテストに限定されないことを意味します。

于 2013-01-07T15:52:11.870 に答える
5

self提供されていると思いますがassertRaises、引数を個別にリストすることを期待しています。試す:

self.assertRaises(TypeError, self.calculator.add, 'hello', 4)
于 2013-01-07T15:45:51.330 に答える
1

この方法で値を渡す必要があります。

self.assertRaises(TypeError, self.calculator.add, arg1, arg2, arg3)
于 2013-01-07T15:45:41.710 に答える