6

私はこれを持っています:

 class FooGenerator:IFooGenerator {
      private object _generated;

      public void Generate() {
         // Generating
         GenerateSmallPart();
         GenerateOtherSmallPart();
         GenerateTinyPart();
         // A lot similar
      }

      private void GenerateSmallPart() {
         //add small part to _generated
      }

      private void GenerateOtherSmallPart() {
         //add small part to _generated
      }

      private void GenerateTinyPart() {
         //add small part to _generated
      }
   }

   internal interface IFooGenerator {
      void Generate();
   }

私のアプリケーションでは、IFooGeneratorIoC 経由でのみ使用していますが、これらすべてのサブメソッドをテストしたいと考えています。

ここで見つけたように、1 つのオプションは、すべてのサブメソッドでクラスを抽出することです。しかし、なぜ私はそれをする必要があります。でのみ使用されていFooGeneratorます。

クラスをよりテストしやすくする方法について何か提案はありますか?

4

3 に答える 3

0

クラスは 1 つのことではなく、いくつかのことを行います。それぞれがプライベート メソッドにカプセル化されています。これは、単一責任の原則 (SRP) に違反しています。SRP によると、クラスは 1 つのことだけを行う必要があります。

Neil Thompson は、private メソッドを public にするべきだと提案しています。これにより、少なくとも単体テストにアクセスできるようになりますが、それでも SRP 違反です。クラスでさまざまなことを行う必要がある場合、イニシエーションは複雑になることがよくあります。小さなコーナーをテストしたいだけですが、すべてのメソッドのニーズを満たす状態でクラスを作成する必要があります。これは、テスト容易性には何の役にも立たない。

これに続いて、アウトコールドマンの答えはより健全な設計です。彼のコードには SRP 違反はありません。

于 2013-04-10T10:41:38.143 に答える