Я пытаюсь MOq и проверить следующий метод: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 очень основной объект передачи данных, он получил Retailer и SkuCount свойства ,
Испытание класса зависит от IFactory и IHelper, оба из которых я издеваюсь над тестовым классом.
Похоже, что код для тестируемого класса в порядке. Проблема, когда насмехается в том, что я получаю 3 одинаковые модели просмотра, добавленные в список (все как тот, который я ожидаю добавить как последний), вместо 3 разных. Я думаю, что проблема с моим тестом заключается в том, что, как я устанавливаю moq фабрики, 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