1. ホーム
  2. c#

内部クラスライブラリのテスト方法は?

2023-10-16 16:20:13

質問

私は、複雑なオブジェクトを作成するクラスライブラリを書きたいと思っていますが、できるだけ公開しないでください。私はそれを他のプロジェクトに含めたいのですが、そこで私は、例えば、内部で作成されたクラスのオブジェクトを私に返す、このライブラリへの1つの呼び出しだけを持っています。私は他の人がこれらのオブジェクトを明示的に作成することを許可したくないのですが、それでも私はこのクラスライブラリのためのテストプロジェクトを作成したいのです。

例えば

var result = Manager.Instance.Create(definition)

クラスライブラリへのアクセスはこれだけにしてください。

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

内部メカニックをテストすべきではないこと、そしてそれは一般的に悪い設計であることは知っています。 この記事 を読みましたが、ライブラリ+ユニットテストプロジェクトを作成し、その後、ラッパーか何かで、このクラスへのアクセスを制限する方法はないのでしょうか?

どのように解決するのですか?

.NETでは InternalsVisibleToAttributeを使用します。 を使用して、ユニット テスト プロジェクトから内部型を見えるようにすることができます。

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

このような使い方をするんですね。

[assembly:InternalsVisibleTo("NameOfYourUnitTestProject")]