で新しいオブジェクトを生成しない:部品番号 - あざける工場は、私は次のメソッドをMOQし、テストしようとしている各反復
public List<SkuCountByRetailerVm> GetSkuCountsByRetailer()
{
var viewModels = _factory.GetEmptyListOfSkuCountByRetailerVms();
foreach (var retailer in _helper.GetAllRetailersInReading())
{
var vm = _factory.GetSkuCountsByRetailerVm();
vm.Retailer = retailer;
vm.SkuCount = _helper.GetSkuCountByRetailerInReading(retailer);
viewModels.Add(vm);
}
return viewModels;
}
SkuCountByRetailerVmクラスは非常に基本的なデータ転送オブジェクトである、それは小売業者とSkuCountの性質を持っています。
テスト対象のクラスは、IFactoryとIHelperに依存します。どちらも私がテストクラスで嘲笑しています。
テスト対象のクラスのコードが正常であるようです。嘲笑するときの問題は、3つの異なるビューモデルではなく、3つの同じビューモデルをリストに追加することです(最後に追加すると思われるビューモデルと同じです)。私のテストの問題は、私が工場のモークをセットアップする方法であると思います。mockFactory.Setup(m => m.GetSkuCountsByRetailerVm()).Returns(new SkuCountByRetailerVm());
VMは同じオブジェクトを指しているだけなので、毎回新しいVMをインスタンス化する必要がありますか?これが正しい結論であるかどうかわからない場合は、どうすればそれをMoqとは別の方法で行うのか。
これが必要な場合は、以下のテストクラスを貼り付けます。
[TestInitialize]
public void Setup()
{
Mock<IReadingHelper> mockHelper = new Mock<IReadingHelper>();
Mock<IVmFactory> mockFactory = new Mock<IVmFactory>();
mockFactory.Setup(m => m.GetEmptyListOfSkuCountByRetailerVms()).Returns(new List<SkuCountByRetailerVm>());
mockFactory.Setup(m => m.GetSkuCountsByRetailerVm()).Returns(new SkuCountByRetailerVm());
mockHelper.Setup(m => m.GetAllRetailersInReading()).Returns(
new List<string> { "Fake1", "Fake2", "Fake3" });
mockHelper.Setup(m => m.GetSkuCountByRetailerInReading("Fake1")).Returns(5);
mockHelper.Setup(m => m.GetSkuCountByRetailerInReading("Fake2")).Returns(10);
mockHelper.Setup(m => m.GetSkuCountByRetailerInReading("Fake3")).Returns(15);
SkuCountByRetailerVmBuilder builder = new SkuCountByRetailerVmBuilder(mockHelper.Object, mockFactory.Object);
_vms = builder.GetSkuCountsByRetailer();
}
ありがとう、これは完全に動作します。 – Turo