NameError
に変更しない限り、最後の行が上がります
self.assert_foo('doo')
assert
それはさておき、ラッパーの有無にかかわらず、上記のコードで使用する必要はないと思います。修正された行は、設定されていることのみをチェックし、設定されself
て.foo_doo
いないことはチェックしませんNone
。
if self.foo_doo is not None:
両方を行います。
簡略化されたルックファースト属性チェックが必要な場合は、次のように記述できます。
def has_foo(self, name):
return hasattr(self, 'foo_'+name)
def foobar(self):
if has_foo('doo'):
None
非チェックも必要な場合は、has_foo
リターンを次のように変更します。
return getattr(self, 'foo_'+name, None) is not None
これを超えて、assert
本番コードでは、コードのユーザーによって影響を受ける実行時の状態ではなく、内部ロジックをチェックするためにのみ使用する必要があります。ユーザーはアサーションを削除または無効にできるため、コードが解放された後の適切な動作については、アサーションに依存しないでください。
上記のコードでは、は何か__init__
に設定self.foo_doo
されていますが、呼び出し元は後で属性を削除できます。したがって、属性の存在と値はどちらもユーザーが決定した実行時の条件であり、アサーションの適切な対象ではありません。
のTestCase.assertXxx
メソッドはunittest
テストにのみ使用され、失敗した場合は、単純なをラップするだけではありませんassert
。