Используйте Rhino Mocking для удаления функциональности тестового модуля - PullRequest
0 голосов
/ 24 октября 2018

Я использую насмешку Rhino для модульного тестирования, чтобы протестировать метод, который удаляет транспорт. Однако я не уверен, как его протестировать.Ниже приведено то, что у меня есть, но оно не работает (Assert.AreEqual не работает, поскольку в результате возвращается ссылка на объект исключения, не установленный для экземпляра объекта)

    /// <summary>
   /// Test Case: to
   /// </summary>
    [TestMethod]
    public void Should_DeleteTransload()
    {
        //expect
        mockTransloaderRepository.Expect(r => r.GetOneAsync(x => x.Id == ostTransloader5.Id)).IgnoreArguments().Return(Task.FromResult(ostTransloader5));
        mockOstTransloaderService = MockRepository.GenerateMock<OstTransloaderService>(mockTransloaderRepository, mockAuditContext);
        mockTransloaderRepository.Expect(r => r.AddAsync(ostTransloader5)).IgnoreArguments().Return(Task.Run(() => true));
        mockTransloaderRepository.Expect(r => r.AddAsync(ostTransloader4)).IgnoreArguments().Return(Task.Run(() => true));
        List<OstTransloader> ostTransloaders = new List<OstTransloader>() { ostTransloader4 };

        mockTransloaderRepository.Expect(t => t.DeleteAsync(ostTransloader5)).IgnoreArguments().Return(Task.Run(() => true));
        ////act
        var result = mockOstTransloaderService.PurgeTransloadShipmentMaterial(transloadIds);
        //// assert
        Assert.IsNotNull(result);
        Assert.AreEqual(ostTransloaders, result);           

    }

Как проверить, что правильная передача имеетбыл удален?

1 Ответ

0 голосов
/ 25 октября 2018

Два отказа от ответственности: (1) Я переехал из Rhino Mocks в Moq несколько лет назад, так что это по памяти.(2) Я не вижу тестируемый вами код, поэтому я должен предположить, что вы правильно настраиваете свои макеты в соответствии с тем, как работает код.

Вам нужно проверить, был ли правильный вызовсделал в зависимость.Это делается с помощью Verify.Добавьте это в ваш assert раздел.

mockTransloaderRepository.Verify(t => t.DeleteAsync(ostTransloader5));

Вы можете доказать, правильно ли это проверяется, изменив тестируемый код на вызов DeleteAsync(null), что должно привести к сбою теста, и когда выположите его обратно, тест должен пройти.

Кстати, в Moq я бы также предложил использовать параметр Times.Once, чтобы он вызывался ровно один раз, и я предполагаю, что Rhino Mocks имеет нечто подобное, но я извиняюсь, я не знаю, что это такое.

...