5

マイセットアップ

Python の pytest と ctypes を使用して C ライブラリの関数をテストしています。C ライブラリの各関数は組み込み Linux PCI ボード上の関数を呼び出し、C ライブラリ関数は一連のリターン コードにマップされる整数を返します。関数が成功した場合は 0 を返し、それ以外の場合は他のエラー コードを返します。

問題

このセットアップをテストする最良の方法についての洞察を探しています。基本的に、このライブラリをテストするためのベストプラクティスを見つけようとしています。例外をスローし、テスト ケースをアサートする最良の方法。私が現在使用しているテスト環境は pytest を使用しているため、切り替えるのは面倒です。

組み込み Linux ボードには状態があるため、さまざまな条件をすべてテストするために、テスト用にセットアップする必要がある多くの状態があります。したがって、理想的には、Python は、エラーが発生した場合にテストで発生するすべてのエラーをキャッチします。

現在のセットアップ

現在、C ライブラリ コードをラップする Python 関数があります。テストは Python コードを呼び出します。関数が 0 を返さない場合は、ラップしている Python 関数が例外をスローします。私は ctypes を使用して DLL の関数を呼び出しているため、すべての C 関数はいずれにせよ python によってラップされ、呼び出しが容易になり、引数の受け渡しが容易になります。

利点

  • テストまたは中間テストのセットアップに問題がある場合、例外がスローされます。これにより、テスト ケースのセットアップが失敗したときに、失敗したテスト ケースのデバッグが容易になります。

短所

  • 関数が成功した (0 を返す) ことをアサートしても意味がありません。関数が戻る前にエラーがスローされるからです。
  • 特定の条件下で関数を呼び出すとエラーが発生することをテストしている場合は、テスト ケースの乱雑な try-except ブロックをラップする必要があります。

    try:
       return_code = call_to_c_api()
       assert return_code == 0, "Message about test case"
    except MyCustomException:
       assert MyCustomException.message="Return code of python wrapped api"
    

別のオプション

C ライブラリを python ライブラリでラップして、セットアップ関数の 1 つが機能しない場合に失敗をアサートするテストまで作成しないでください。

利点

  • 失敗が予想される場合、C API からの戻り値が O ではないことをアサートするのは非常に簡単です。

短所

  • デバッグしやすいテストを作成するには、C API への呼び出しごとに、Python テストでコードが渡されたことを確認する必要があります。それがテストのセットアップのための呼び出しであっても。これは、各テストのコード行数がほぼ 2 倍になることを意味します。(または、セットアップでエラーをキャッチできず、テストが失敗したときにのみアサートすることができませんでした。これは、テスト ケースのセットアップが失敗したときの面倒なデバッグを意味します)

誰かがこれをテストするための最良の方法についての洞察を与えることができれば、それは大歓迎です! これをテストするには、まだ検討していない他の方法がおそらくあります。

乾杯!

4

0 に答える 0