2

Python コードの例外をテストする必要がありますが、正しいステートメントを実行できないようです。
実稼働コードをテストすると、例外がスローされることがわかりますが、単体テスト ファイルでこの例外をテストすると、次のようになります。

testincorrectparam (unittestearnings.TestEarningsArgs)
should raise error when param not an integer ... "3v" is not a valid argument.  i should be an integer
ERROR

SOで同様の質問を読みましたが、問題に対する満足のいく答えを見つけることができません..

製品コードは次のようになります。

class Earnings():

    def printd(i=0):

        try:
            i = int(i)

        except Exception:
            print('"' + i + '"' + " is not a valid argument.  i should be an integer")
            sys.exit(0)

単体テスト コードは次のとおりです。

from earnings import Earnings
import unittest

class TestEarningsArgs(unittest.TestCase):

   def testincorrectparam(self):
      '''should raise error when param not an integer'''
      e = Earnings()
      value = "3v"
      self.assertRaises(Exception, e.printd(i=value))

if __name__ == "__main__":
      unittest.main()

どんな助けにも本当に感謝します。

4

3 に答える 3

1

問題は、例外がキャッチされ、ユニットテストに伝播されないことです。try-except ステートメントを削除してそのままにする必要がありますi = int(i)。この場合、例外が発生し、assertRaisesそれ自体をキャッチします。

別の問題は、コード内の行 sys.exit(0) です。Exception クラスは特定の例外ではないため、それを raise Exception(...) に置き換える必要があります (エラーが発生すると予想される状況では、より具体的な例外を発生させる必要があります)。

于 2012-08-10T13:58:29.607 に答える
0

sys.exit(0)と置き換えますraise

于 2012-08-10T14:01:35.290 に答える
0

私はPythonで単体テストを学ぼうとしています.assertRaiseの一般的な形式は

TestCase.assertRaises(Exception, callable, parameter1,parameter2,...)

だから試してみてください

self.assertRaises(Exception, e.printd,i=value)

それがあなたのために働くことを願っています

于 2012-08-11T05:18:21.603 に答える