内部クラスライブラリのテスト方法は?
質問
私は、複雑なオブジェクトを作成するクラスライブラリを書きたいと思っていますが、できるだけ公開しないでください。私はそれを他のプロジェクトに含めたいのですが、そこで私は、例えば、内部で作成されたクラスのオブジェクトを私に返す、このライブラリへの1つの呼び出しだけを持っています。私は他の人がこれらのオブジェクトを明示的に作成することを許可したくないのですが、それでも私はこのクラスライブラリのためのテストプロジェクトを作成したいのです。
例えば
var result = Manager.Instance.Create(definition)
クラスライブラリへのアクセスはこれだけにしてください。
定義パラメータに基づき、要求されたインスタンスを作成するために異なるサブクラスを使用し、それに応じてプロパティを設定します。したがって、私はテストによって、作成プロセス全体がうまくいったことを何とか保証したいのです。しかし、結果オブジェクトの内部プロパティもほとんど公開したくないので、アサーションするプロパティがないため、このパブリックアクセスメソッドだけを使ってテストすることはできません。
内部メカニックをテストすべきではないこと、そしてそれは一般的に悪い設計であることは知っています。 この記事 を読みましたが、ライブラリ+ユニットテストプロジェクトを作成し、その後、ラッパーか何かで、このクラスへのアクセスを制限する方法はないのでしょうか?
どのように解決するのですか?
.NETでは InternalsVisibleToAttributeを使用します。 を使用して、ユニット テスト プロジェクトから内部型を見えるようにすることができます。
そうすることで、クラスを内部に保持しながら、アクセスを許可した他のアセンブリからそれを使用することができます。
このような使い方をするんですね。
[assembly:InternalsVisibleTo("NameOfYourUnitTestProject")]
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] .NETでapp.configやweb.configから設定を読み込む
-
[解決済み] C# "internal "アクセス修飾子でユニットテストを行う場合
-
[解決済み] プライベートメソッドのユニットテストはどのように行うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] C# "internal "アクセス修飾子でユニットテストを行う場合