1

ライブラリは src-directory にあり、データ定義 A があります。多くのチュートリアルで示唆されているように、テストに関連するコードは test-directory にあり、テスト ケースを生成するための Serial インスタンスが含まれています。以下のリンクを参照してください。

instance Monad m => Serial m A where ...

cabal testこれが孤立したインスタンスであることを警告します。これは避けられませんか、それともライブラリを整理するための確立された規則がありますか?たとえば、シリアルインスタンス定義をデータ A が定義されている場所に移動しますか? 後者は、関連するものを test-directory でテストし続けるのがいいので、少し間違っているように感じます。これが典型的な方法である場合、公開インターフェースでテスト関連のものを公開することをどのように避けることができますか? テストされたすべてのモジュールの「内部」バージョンを作成しますか (公開モジュールと実際のテスト プログラムが使用するもの)? 単体テストの質問で同様のことが提案されました。

それとも、これはまったく問題ですか?関連するコードのテストで孤立したインスタンスを残すことは、どれほど悪い慣習ですか?


SmallCheck: 型クラス Serial の型インスタンスの作成

Haskell で SmallCheck を使用するには?

4

1 に答える 1

1

関連するコードのテストで孤立したインスタンスを残すことは、どれほど悪い慣習ですか?

あまりない。ここで@Potonnierに同意します。孤立したインスタンスは、Haskell のオープンワールドの仮定により不快ですが、テスト実行可能ターゲットはかなり閉じた世界であると主張します。テスト実行可能パッケージによって提供されるモジュールを誰もインポートしないこと、およびそこにあるモジュールが依存関係グラフの「葉」であることを合理的に期待できます。それが真実である限り、孤立したインスタンスが最悪のシナリオにつながるシナリオを想像するのは困難です。つまり、実際には失敗するはずの孤立したインスタンスが原因でテストが成功するという、偽陽性のようなものです。これは二者択一の決定ではありませんが、ここでの費用便益分析は、テスト ライブラリを依存関係として含めることに不利に働くと思います。

于 2016-08-10T14:38:03.387 に答える