F#:別のプロジェクトの内部モジュールをテストする方法は?
Aug 19 2020
.NetドキュメントのF#のベストプラクティスに従います。
- アプリケーション用のプロジェクトを作成します(ライブラリではなくコンソール)
- テスト用のプロジェクトを作成します(Expectoを使用しますが、関係ありません)
問題:一部のアプリケーションモジュールがinternal
キーワードで公開されていません。したがって、これらのモジュールをテストプロジェクトにインポートすることはできません。
=>これらのモジュールのユニットテストを実行するにはどうすればよいですか?内部アクセス制御を削除する必要がありますか?
ありがとう!
回答
1 Abel Aug 19 2020 at 17:45
テストするにはinternal
、を使用InternalsVisibleTo
してプライベートクラスをテストし、テストプロジェクト内のファイルをリンクできます([ファイルの追加]ダイアログが表示されているときに、開く代わりにリンクを選択できます)。
ただし、すでにコメントされているように、通常はパブリックインターフェイスのみをテストします。ただし、複雑な内部も個別にテストしたい場合があります。たとえば、.NETランタイムライブラリでは、これは頻繁に行われ(複雑な内部構造がたくさんあります)、リンクアプローチを頻繁に使用します。
privateは実際にはクラスのprivateを意味し、拡張メソッドからそのようなメンバーにアクセスすることさえできないため、そのようなメンバーをパブリックメンバーとして独自のプライベートクラスに配置する必要があります。そうすれば、リンクすると、クラスとメンバーにもアクセスできますが、本番バージョンではどちらにもアクセスできません。
この手法は慎重に使用してください。これは、個人情報がテストシステムにバインドされ、内部実装を自由に変更できないためです。