値の検証を扱うクラスがたくさんあります。たとえば、RangeValidator
クラスは値が指定された範囲内にあるかどうかをチェックします。
すべてのバリデータクラスには2つのメソッドが含まれます:値is_valid(value)
を返すTrue
かFalse
、値に応じて、ensure_valid(value)
指定された値をチェックし、値が有効な場合は何もしないか、値が事前定義されたルールに一致しない場合は特定の例外をスローします。
現在、このメソッドに関連する2つの単体テストがあります。
無効な値を渡し、例外がスローされたことを確認するもの。
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
有効な値を渡すもの。
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
2番目のテストは、例外をスローすると失敗し、ensure_valid
何もスローしないと成功しますが、assert
内部にs がないという事実は奇妙に見えます。そのようなコードを読んだ人は、何もしていないように見えるテストがなぜあるのかをすぐに自問するでしょう。
これは、値を返さず、副作用のないメソッドをテストするときの現在のプラクティスですか?または、テストを別の方法で書き直す必要がありますか?または、単に私がやっていることを説明するコメントを入れますか?
self
参照のために保存する)関数があり、結果を返さない場合、それは純粋な関数ではありません。
void
、多くの言語で呼び出され、愚かなルールを持つ「ユニットタイプを返す」と解釈されます)。ループ(「結果を返さない」というのが実際に結果を返さないことを意味する場合でも機能します。)
unit -> unit
ます。残念ながら、ユニットを返すだけで、他には何もしません。