1

テスト中のメソッドで呼び出されているプラ​​イベート メソッドがあります。このプライベート メソッドに正しいパラメータが渡されていることを確認したいと思います。私が望むものをテストする次の設定を Moq に書きましたが、実際にはアレンジ、アクト、アサートのパターンに従うことはできません。

アサートによって、他のすべてのアサートと一緒に表示される同様のテストを実行できる方法はありますか? 現時点では、以下のコードはアレンジ内にあります。

     myClass.Setup(
                x =>
                x.myMethod(
                    It.IsAny<Person>>(),
                    It.IsAny<string>(),
                    It.IsAny<Person>(),
                    It.IsAny<ICollection<string>>(),
                    It.IsAny<ICollection<string>>(),
                    It.IsAny<bool>())).Callback
                <Person, string, Person, Person, ICollection<string>, bool>(
                    (a, b, c, d, e, f) =>
                        { 
                            Assert.AreEqual("NameA", a.Name); 
                            Assert.AreEqual("StringB", b);
                            Assert.AreEqual("NameC", c.Name);
                            Assert.AreEqual(2, d);

                            var dList = d.ToList().OrderBy(x => x.Name);
                            Assert.AreEqual("PersonA", dList[0].Name)
                            Assert.AreEqual("PersonB", dList[1].Name);
                        });

メソッドが特定の入力で呼び出されたかどうかを確認するために検証を実行できることは承知していますが、ICollection パラメーターを一致させる方法については知りません。

4

2 に答える 2

3

これらのアサーションを使用してパラメータをチェックしている場合は、セットアップで実行できます。モックが厳密な動作を使用している場合、パラメーターが述語と一致しない場合、モックは失敗します。

 // declare your mock with strict behavior

 myClass.Setup(
     x =>
     x.myMethod(
         It.Is<Person>(person => person.Name == "NameA"),
         "Stringb",
         It.Is<Person>(person => person.Name == "NameC"),,
         It.Is<ICollection<string>>(coll =>{ 
                //your other validations
            }),
         It.IsAny<ICollection<string>>(),
         It.IsAny<bool>()));
于 2012-04-17T14:07:20.843 に答える
2

単体テストの目的は、クラスが期待どおりに動作することを確認することです。パブリックインターフェイスを介してクラスを実行し、次のことを確認する必要があります。

  • クラスの状態の変化
  • 返された結果
  • 依存関係の呼び出し

クラスが期待どおりに動作している間は、他のものには価値がありません。クラスをリファクタリングして、そのプライベートメソッドをインラインにすることができます。

于 2012-04-17T13:57:00.543 に答える