4

条件によってカスタム例外メッセージが発生する関数内でassertRaise例外を発生させようとしています。

働き:

if not Cart.objects.filter(member=member).count():
    raise CartDoesNotExist("Cart Does Not Exist for Member: %s ( %id )." % (member.email,member.id))

これで、raiseステートメントに到達するために必要な条件を正常に生成できます。

だから、私のテストケースは次のようになります:

def Order_CartDoesNotExist(self):        
  self.assertRaises(CartDoesNotExist,Order.objects.create_order(member=self.member2,member_slot=self.memslot,order_type="Normal"))

テストを実行すると、出力はエラーになります。同じエラーCartDoesNotExist....が発生します。

だから私の質問は、これらの種類の例外をどのように発生させるかです。ユニットテストでこれらの状況をカバーするにはどうすればよいですか?これらの条件は重要であり、コードカバレッジを増やすため、これらの条件を回避したくありませんか?

皆さん、ありがとうございました。

4

1 に答える 1

4

コードがcreate_orderを直接呼び出しているため、例外が発生します。あなたはそれが呼ばれる方法を変える必要があります。Python 2.7では、次を使用できます。

with self.assertRaises(CartDoesNotExist):
    Order.objects.create_order(member=self.member2, member_slot=self.memslot, order_type="Normal"))

ここで、コンテキストマネージャーを使用すると、コードを直接呼び出すことができ、コンテキストマネージャーが例外を処理します。

2.6以下で実行している場合:

self.assertRaises(CartDoesNotExist, Order.objects.create_order, member=self.member2, member_slot=self.memslot, order_type="Normal")

ここでは、関数を呼び出していません。必要な引数とともに、assertRaisesに関数を渡しています。assertRaisesはコードを呼び出し、例外を適切に処理します。

于 2012-07-07T02:56:29.057 に答える