18

他の開発者に役立つ可能性のあるタイプをエクスポートするcabalパッケージがあります。NBT私はArbitrary自分のタイプのインスタンスを定義するのに苦労しました。私の仕事を統合するコードをテストするために他の開発者にインスタンスを提供しないのは残念です。

ただし、インスタンスが邪魔になるような状況は避けたいと思います。おそらく、他の開発者は、インスタンスがどうあるべきかについて異なる考えを持っています。Arbitraryおそらく、QuickCheckの特定のバージョンに対する私のパッケージの依存関係は、クライアントプロジェクトの依存関係に干渉するか、望ましくない可能性があります。

私の考えは、順不同で、次のとおりです。

  • Arbitraryタイプの定義の横にインスタンスを残し、クライアントがインスタンスのシャドウイングまたはQuickCheckバージョン番号のオーバーライドを処理できるようにします。
  • Arbitrary同じパッケージ内の別のモジュールで、インスタンスを孤立したインスタンスにしますData.NBT.Arbitrary。パッケージ全体のQuickCheckへの依存は残ります。
  • インスタンスを完全に別個のパッケージで提供し、Arbitraryクライアントプロジェクトの別個のテスト依存関係としてリストできるようにします。
  • 条件付きで、ArbitraryインスタンスとQuickCheck依存関係の両方をメインパッケージに含めますが、のようなフラグ-ftestが設定されている場合に限ります。

他のライブラリで使用されているこれらすべての組み合わせを見てきましたが、どれが最適に機能するかについてのコンセンサスは見つかりませんでした。Hackageにアップロードする前に試してみたいと思います。

4

2 に答える 2

3

あまり具体的な経験はありませんが、堅牢性に対する一般的な欲求に基づいて、パッケージの依存関係の指針となる原則はおそらく

それぞれの能力に応じて。それぞれの必要に応じて。

パッケージの依存関係を、その重要な機能に必要な最小限に抑えるのは良いことです。これは、オプション 3 またはオプション 4 を示唆しています。もちろん、パッケージをそんなに切り刻むのは面倒です。オプションが関連する条件を表現できる場合、オプション 4 は、言葉を効果的に使用して意味を伝えることに基づいた賢明なアプローチのように思えます。

テストキットと基本機能を取得するには、どのスイッチを押す必要があるかについてコンセンサスが得られれば、非常に良いでしょう.

ここに改良の余地があることも明らかです。Cabal がそれと同じようにうまく機能することは驚くべきことですが、おそらく SML モジュール システムのやり方に従って、「パッケージ」のより洗練された概念を可能にすることができます。依存関係を関数型に変換すると、基本的に次のようになります

simplePackage :: (Dependency1, .., Dependencyn) -> Deliverable

しかし、次のような製品と機能のより精巧な組み合わせを想像することができます。

fancyPackage :: BasicDependency -> (BasicDeliverable, HelpfulExtras -> Gravy)

それまでは、実際の取引を最も正確に反映するオプションを選択してください。そして、そのコンセンサスを構築できるように、それについて教えてください.

于 2011-08-12T18:57:36.500 に答える
2

NBT問題は次のとおりです。あなたのライブラリを使用している誰かが、あなたのタイプを使用して QuickCheck テストを実行したいと思う可能性はどのくらいありますか?

その可能性が高く、Arbitrary インスタンスが詳細である (したがって、別の人にとって変更される可能性が低い) 場合は、特にパッケージを更新し続けることを確認する場合は、パッケージと一緒に出荷するのがおそらく最善です (フラグを使用するかどうかに関しては、個人的な好みのビットになります)。ただし、インスタンスが比較的単純な場合 (したがって、人々がそれをカスタマイズしたいと思う可能性が高い場合) は、ドキュメントでサンプル インスタンスを提供するだけでよいかもしれません。

型が主に内部的なものであり、テストを実行したい他の人が使用する可能性が低い場合は、フラグを使用して条件付きで QuickCheck を取り込むことが、不要な依存関係を回避するためのおそらく最良の方法です (つまり、テスト スイートはちょうどそこにあります)。パッケージをテストできます)

一般的に、QuickCheck のみのパッケージを使用するのは好きではありませんが、場合によっては便利かもしれません。

于 2011-08-12T22:46:42.620 に答える