F#:別のプロジェクトの内部モジュールをテストする方法は?

Aug 19 2020

.NetドキュメントのF#のベストプラクティスに従います。

  • アプリケーション用のプロジェクトを作成します(ライブラリではなくコンソール)
  • テスト用のプロジェクトを作成します(Expectoを使用しますが、関係ありません)

問題:一部のアプリケーションモジュールがinternalキーワードで公開されていません。したがって、これらのモジュールをテストプロジェクトにインポートすることはできません。

=>これらのモジュールのユニットテストを実行するにはどうすればよいですか?内部アクセス制御を削除する必要がありますか?

ありがとう!

回答

1 Abel Aug 19 2020 at 17:45

テストするにはinternal、を使用InternalsVisibleToしてプライベートクラスをテストし、テストプロジェクト内のファイルをリンクできます([ファイルの追加]ダイアログが表示されているときに、開く代わりにリンクを選択できます)。

ただし、すでにコメントされているように、通常はパブリックインターフェイスのみをテストします。ただし、複雑な内部も個別にテストしたい場合があります。たとえば、.NETランタイムライブラリでは、これは頻繁に行われ(複雑な内部構造がたくさんあります)、リンクアプローチを頻繁に使用します。

privateは実際にはクラスのprivateを意味し、拡張メソッドからそのようなメンバーにアクセスすることさえできないため、そのようなメンバーをパブリックメンバーとして独自のプライベートクラスに配置する必要があります。そうすれば、リンクすると、クラスとメンバーにもアクセスできますが、本番バージョンではどちらにもアクセスできません。

この手法は慎重に使用してください。これは、個人情報がテストシステムにバインドされ、内部実装を自由に変更できないためです。