3

私は TDD の概念に不慣れで、アプリケーションのパブリック インターフェイス用の優れた単体テストを作成するコツをつかみ始めたところです。

現在、パブリック インターフェイスが比較的小さいクラス ライブラリに取り組んでいますが、舞台裏でクラスが非常に複雑になっています。この機能は、内部スコープのクラスとメソッドで実装されるため、単体テストには使用できません。これらのクラスとメソッドを公開したくないのは、それらを使用するアプリケーションで使用できないためです。ただし、より具体的なテスト ケースを作成しない限り、アプリケーションのすべての機能を適切にテストできるとは思えません。

どうすればそのようなテストを達成できるか、誰か説明してもらえますか? または、より良いテストを容易にするために変更できる私のアプローチに問題があります。

ところで、私は C# .NET 環境で作業していますが、私の質問は Java や他の多くのプラットフォームにも当てはまると思います。

4

4 に答える 4

1

dotnet を使用しているため、他のクラスを dll-internalにし、ビジネスクラスでinternalsvisibleto属性を使用して、unittest-dll がそれらにアクセスできるようにすることができます。

于 2012-07-26T17:58:30.687 に答える
0

プライベート メソッドを単体テストしないでください。テストする価値がある場合は、公開する価値があるか、機能を独自のクラスにする必要があります。壊れたSOLIDの原則のようです。

于 2012-07-26T20:52:58.023 に答える
0

ほとんどの単体テストの達人は、パブリック インターフェイスのみをテストする必要があると言うでしょう。しかし、私はよく似たような状況に陥ったので、私は彼らに同意しません. C# と単体テストをサポートするバージョンの Visual Studio を使用している場合は、幸運です。Test-> New Test... をクリックし、"Unit Test Wizard" を選択します。次に、テストするメソッドを選択します (プライベート メソッドを含む)。Visual Studio によって単体テストが自動的に生成されます。プライベート メソッドの場合、MyClass_Accessor などの名前のシャドウ クラスが作成されます。これらのクラスは元のクラスとまったく同じですが、それらのプライベート メンバーはパブリックです。クラスを変更すると、これらのシャドウ クラスも自動的に更新されます。

于 2012-07-26T18:00:40.840 に答える
0

Java では通常、PowerMock の Whitebox クラスなどを使用してアクセス チェックを回避するか、デフォルト (パッケージ) スコープを使用します。つまり、アクセス修飾子はまったくありません。単体テストは通常​​、テスト対象のクラスと同じパッケージに含まれています。.NET では、内部スコープで同様の機能を取得できる可能性がありますが、その場合、テストとテスト対象のコードを同じアセンブリにする必要があるようです。それが問題になる場合は、テスト アセンブリをテスト対象コードのフレンド アセンブリにすることができます。

于 2012-07-26T17:50:57.460 に答える