それはユニットテストの目的ではありません!
- あなたのファイルはUNITを表していないので、ファイルをテストしたり、ファイルを使用したりしないでください。
- 単体テストでは、a)ファイル処理b)計算を処理する関数/メソッドのすべてのメソッドをテストする必要があります
- ユニットテストがテスト対象のユニットのコード行を超えることはめったにありません。
ユニットテストとは、(完全ではなく、本による定義でもない)ことを意味します。
- ミニマル/アトミック-ユニットを可能な限り最も基本的/シンプルなユニットに分割します。ユニットは通常、呼び出し可能です(メソッド、関数、呼び出し可能オブジェクト)
- 関心の分離-すべてのテストで1つだけをテストします。単一のユニットのさまざまな条件をテストする場合は、さまざまなテストを作成します
- 決定論-ユニットに処理するものを与え、その結果がどうなるかを事前に知っておく必要があります
- テスト対象のユニットに特定の環境が必要な場合は、フィクスチャ/テストセットアップ/モックアップを作成します
- ユニットテストは(経験則として)非常に高速です!遅い場合は上から別のポイントに違反していないか確認してください
- 上から何かに違反する何かをテストする必要がある場合は、統合テストに向けてテストの次のステップを実行した可能性があります
- ユニットテストではなくユニットテストフレームワークを使用できますが、unittest-frameworkを使用しているという理由だけでユニットテストとは呼ばないでください。
この男(Gary Bernhardt)は、テストと単体テストの意味について、興味深い実用的な例をいくつか持っています。
いくつかの説明のための更新:
「1.ファイルが開いたことをテストしますか?」
それはできますが、そのための「ユニット」は何でしょうか。テストには、合格と不合格の2つの解決策しかないことに注意してください。テストが失敗した場合、その理由は1つだけである必要があります(理想的にはそうする必要があります)。ユニット(=関数)は最悪です。ただし、この場合、次の理由でテストが失敗する可能性があります。*ファイルが存在しない*ロックされている*破損している*ファイルハンドルが残っていない*記憶から外れている(大きなファイル)*月の満ち欠けなど。
では、失敗した(または合格した)「ユニット」テストは、あなたのユニットについて何と言いますか?ユニットを単独でテストするのではなく、周囲の環境全体をテストします。それはもっとシステムテストです!それでもファイルを開くことができるかどうかをテストしたい場合は、少なくともファイルをモックする必要があります。
「2...計算をユニットテストするにはどうすればよいですか?文字通りすべてを手動で計算して、結果が正しいことをテストする必要がありますか?」
いいえ。コーナーケースと通常のケースのテストを作成し、処理された結果に対して期待される結果を確認します。必要なテストの量は、計算の複雑さとルールの例外によって異なります。
例えば:
def test_negative_factor(self):
assert result
def test_discontinuity(self):
assert raise exception if x == undefined_value
私は自分自身をより明確にしたことを願っています!