Я новичок в Unit Testing и Moq, поэтому, если я полностью ошибаюсь в своем методе или понимании, пожалуйста, помогите мне.Moq setup вызывает null
У меня есть логический метод, который я тестирую. Я прокомментировал логику, но все, что она делает, это проверить несколько значений в «модели» и вернуться, если есть проблема. В случае, когда мы смотрим, проблем нет.
public ReplyDto SaveSettings(SnowballDto model)
{
// Some logic here that reads from the model.
var result = _data.SaveSettings(model);
return result;
}
Мой тест, используя NUnit и MOQ, выглядит следующим образом:
_logic = new SnowballLogic(mockSnowballData.Object, mockLog.Object);
mockSnowballData
.Setup(x => x.SaveSettings(SnowballDto_Good))
.Returns(new ReplyDto {
IsSuccess = true,
Message = "Saved",
ReplyKeyID = 1
});
В каждом тесте я называю собственной функции установки, которая устанавливает, что я буду использовать.
private void SetupData()
{
SnowballDto_Good = new SnowballDto {
FirstPaymentDate = DateTime.UtcNow,
ID = 1,
OrderedIDPriority = new List<int>(),
SnowballTypeID = 1,
TargetPayment = 1000
};
DebtDtoList_ThreeDebt.Clear();
DebtDtoList_ThreeDebt.Add(new DebtDto { ID = 1, Description = "Debt 1", ManualSnowballPriority = 1, MinimumMonthlyPaymentAmount = 140, OpeningBalance = 5000, RunningData = new DebtRunningDto { Balance = 5000 }, OpeningDate = DateTime.UtcNow, SnowballID = 1, StandardRate = 10 });
DebtDtoList_ThreeDebt.Add(new DebtDto { ID = 2, Description = "Debt 2", ManualSnowballPriority = 2, MinimumMonthlyPaymentAmount = 90, OpeningBalance = 1600, RunningData = new DebtRunningDto { Balance = 1600 }, OpeningDate = DateTime.UtcNow, SnowballID = 1, StandardRate = 15 });
DebtDtoList_ThreeDebt.Add(new DebtDto { ID = 3, Description = "Debt 3", ManualSnowballPriority = 3, MinimumMonthlyPaymentAmount = 300, OpeningBalance = 9000, RunningData = new DebtRunningDto { Balance = 9000 }, OpeningDate = DateTime.UtcNow, SnowballID = 1, StandardRate = 20 });
}
Итак, мое понимание MOQ является то, что я говорю «, когда класс SnowballData в„SaveSettings“methid называется, и„объект SnowballDto_Good“передается в, всегда возвращает новый ReplyDto с IsSuccess = True.
Поэтому, когда я делаю вызов:
var result = _data.SaveSettings(model);
Она должна возвращать ReplyDto с IsSuccess = истинной
Однако, когда я ставлю точку останова когда я вызываю «SaveSettings», он все время возвращает null.
Если изменить мои настройки для:
.Setup(x => x.SaveSettings(It.IsAny<SnowballDto>()))
тест проходит. Почему он возвращает null, когда я даю ему настоящий SnowballDto?
Он сравнивает аргумент по ссылке –
Вы передаете тот же объект, который используется в настройке? – Nkosi
Да, я прохожу один и тот же объект. – Craig