73

複雑なオブジェクトを作成するクラス ライブラリを作成したいと考えていますが、できるだけ公開する必要はありません。私はそれを他のプロジェクトに含めたいのですが、このライブラリへの呼び出しは 1 つしかありません。たとえば、内部で作成されたクラスのオブジェクトを返します。他のユーザーがこれらのオブジェクトを明示的に作成することを許可したくありませんが、それでもこのクラス ライブラリのテスト プロジェクトを作成したいと考えています。

例えば:

var result = Manager.Instance.Create(definition)

これは、クラス ライブラリへの唯一のアクセスである必要があります。

定義パラメーターに基づいて、さまざまなサブクラスを使用して要求されたインスタンスを作成し、それに応じてそのプロパティを設定します。したがって、作成プロセス全体が正常に機能したことをテストによって保証したいと思います。しかし、結果オブジェクトの内部プロパティもほとんど公開したくないので、アサートするプロパティがないため、このパブリック アクセス メソッドのみを使用してテストすることはできません。

内部機構をテストするべきではないことはわかっていますが、それは通常悪い設計であり、この記事も読んでいましたが、ライブラリと単体テスト プロジェクトを作成し、後でこのクラスへのアクセスを制限する方法はないでしょうか。 ? ラッパーか何かで?

4

3 に答える 3

159

.NETでは、クラスライブラリのInternalsVisibleToAttribute を使用して、内部型を単体テストプロジェクトに表示できます。

そうすれば、クラスを内部に保持し、アクセスを許可する他のアセンブリからクラスを使用することができます。

次のように使用します。

[assembly:InternalsVisibleTo("NameOfYourUnitTestProject")]
于 2013-03-15T19:50:55.030 に答える