После насмешек через autofac вызывается фактическая реализация сервиса - PullRequest
0 голосов
/ 19 сентября 2019

Я пишу тестовые примеры для проекта,
Класс обслуживания смоделирован, и даже после имитации вызывается фактическая реализация. Пожалуйста, предложите способ, чтобы правильно смоделировать.Таким образом, этот метод службы корректно смоделирован. G




 [TestMethod]
    public void CustomerTest()
    {
      using (var mock = AutoMock.GetLoose())
      {
        //For testing,Created dummy object of customer having datatable dt
        var response = Task.FromResult(customer(dt))
        // Arrange - configure the mock
        mock.Mock<ICustomerService>().Setup(x => x.GetCustomerDetails(It.IsAny<string>(),It.IsAny<string>())).Returns(response);
        var sut = mock.Create<CustomerViewModel>();

        // Act
        var actual = sut.GetCustomerInfo("12345", "Name");

        // Assert - assert on the mock
        mock.Mock<ICustomerService>().Verify(x => x.GetCustomerDetails(It.IsAny<string>(),It.IsAny<string>(),Times.Once());
        Assert.AreEqual(response, actual);
      }
    }

Я должен смоделировать службу, чтобы фактический метод службы не вызывался.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Похоже, что смоделированный элемент асинхронен из-за того, что вы используете Task.FromResult для ответа

Может ли тест также асинхронизироваться и ожидать испытуемого субъекта

[TestMethod]
public async Task CustomerTest() {
    using (var mock = AutoMock.GetLoose()) {
        //For testing,Created dummy object of customer having datatable dt
        var response = customer(dt);
        // Arrange - configure the mock
        mock.Mock<ICustomerService>()
            .Setup(_ => _.GetCustomerDetails(It.IsAny<string>(), It.IsAny<string>()))
            .ReturnsAsync(response);

        var sut = mock.Create<CustomerViewModel>();

        // Act
        var actual = await sut.GetCustomerInfo("12345", "Name");

        // Assert - assert on the mock
        mock.Mock<ICustomerService>()
            .Verify(_ => _.GetCustomerDetails(It.IsAny<string>(),It.IsAny<string>(), Times.Once());
        Assert.AreEqual(response, actual);
    }
}

Выше предполагается, что макет интерфейса явно вводится в испытуемый объект

public class CustomerViewModel {

    public CustomerViewModel(ICustomerService service) {
        //...
    }

    //...

    public Task<Customer> GetCustomerInfo(string id, string name) {
        //...calls ICustomerService.GetCustomerDetails(id, name);
    }
}
0 голосов
/ 19 сентября 2019

Сделайте метод обслуживания виртуальным, это то, что у меня работает с NUnit.

...