При установке xUnit Moq не удалось определить метод при передаче объекта в - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в модульном тестировании и moq. В моем проекте. net core 3.1 I 'я использую xUnit и Moq для написания модульного теста. У меня ниже сценарий, в котором я не мог понять, почему moq не может обнаружить мою функцию.

Я настроил свой модульный тест, как показано ниже,

        VASTest t = new VASTest()
        {
            RecurringAndOneOffChargeID = 2
        };

        _dataserviceMock.Setup(x => x.CreateVASBillingRunRecurringChargesTest(t))
            .ReturnsAsync(() => true);

        _dataserviceMock.Setup(x => x.CreateVASBillingRunRecurringChargesTest(2))
            .ReturnsAsync(() => true);  

В моей тестовой функции я есть две функции, которые я пытаюсь использовать с вышеуказанной настройкой,

         var result1 = _VASBillingDataAccess.CreateVASBillingRunRecurringChargesTest(tvt).Result;
         var result2 = _VASBillingDataAccess.CreateVASBillingRunRecurringChargesTest(2).Result;

У меня есть класс удара в моих моделях,

public class VASTest
{
    public int RecurringAndOneOffChargeID { get; set; }
}

, когда я запускаю модульный тест, result1 всегда ложно, но result2 всегда верно.

Не могли бы вы дать мне несколько советов, как исправить результат1?

Спасибо.

1 Ответ

0 голосов
/ 06 мая 2020

Ваша настройка:

VASTest t = new VASTest()
{
  RecurringAndOneOffChargeID = 2
};

_dataserviceMock.Setup(x => x.CreateVASBillingRunRecurringChargesTest(t)).ReturnsAsync(() => true);

будет работать, только если этот экземпляр VASTest - t - используется в вызове SUT, или вы реализуете свой собственный метод equals для класса VASTest это может разрешиться, если 2 экземпляра VASTest равны друг другу. Если что-либо из этого не выполняется, вы выполняете проверку равенства по ссылке, и это не будет выполнено. Другая ваша настройка с использованием int (2) работает, поскольку int является типом значения, и проверка равенства всегда выполняется для значения iself.

Я бы просто сделал следующее, если бы я не реализовал IEquatable<T>:

_dataserviceMock.Setup(x => 
    x.CreateVASBillingRunRecurringChargesTest(
        It.Is<VASTest>(t => t.RecurringAndOneOffChargeID.Equals(2))))
    .ReturnsAsync(() => true);
...