У меня есть следующий метод, который я пытаюсь проверить, но мои переменные равны нулю, даже если я пытаюсь их настроить.Moq настройка переменных внутри метода
public void Cancel(Guid id)
{
var order = _orderRepository.Find(o => o.Id == id); ** This never gets set, even with the setup below.**
if (order == null) return; ** Test Fails here. Returns and all assertions fails.**
order.Status = OrderStatus.Cancelled;
_orderRepository.Update(order);
}
[SetUp]
public void Setup()
{
_orderRepositoryMock = new Mock<IRepository<Order>>();
_accountServiceMock = new Mock<IAccountService>();
_orderService = new OrderService(_accountServiceMock.Object, _orderRepositoryMock.Object);
order = new Order()
{
Id = Guid.NewGuid(),
Customer= new ApplicationUser()
{
Id = Guid.NewGuid().ToString(),
Email = "[email protected]",
FirstName = "Tester",
LastName = "Test",
Address = "123 45 Ave",
City = "ABCVille",
PhoneNumber = "1-888-888-8888",
PostalCode = "T3J 0A4",
Province = "Super"
},
OrderAddons = new List<OrderAddon>(),
Total = 363.99m,
Status = OrderStatus.Created
};
}
[Test]
public void CancelShouldCallRepositoryWhenValid()
{
//var order ... (test data, in setUp)
var id = Guid.NewGuid();
order.Id = id;
// Repository Setup
_orderRepositoryMock.Setup(x => x.Find(o => o.Id == id)).Returns(order);
var wasOrderStatusUpdatedCorrectly = false;
_orderRepositoryMock.Setup(x => x.Update(order))
.Callback((Order o) =>
{
wasOrderStatusUpdatedCorrectly = o.Status == OrderStatus.Cancelled;
});
// Test Service
_orderService.Cancel(id);
// Test Assertions
_orderRepositoryMock.Verify(x => x.Find(o => o.Id == It.IsAny<Guid>()), Times.Once);
_orderRepositoryMock.Verify(x => x.Update(order), Times.Once);
}
Нужно ли все-таки протестировать «порядок варрантов»? Я тоже попробовал SetupGet и, похоже, не работал, Moq для меня новичок, поэтому простите меня заранее, если это что-то простое и легкое.
Как насчет 'order' вы хотите протестировать? –
Непонятно, как вы вводите '_orderRepositoryMock.Object' в свою службу. Или вы? Если это _orderService, который вы пытаетесь протестировать, то вы не издеваетесь над этим, только его зависимость. Поэтому вызовите Cancel с помощью фактического guid, например. Guid.NewGuid(). –
Я пытаюсь проверить, что .Find был вызван. Проблема в том, что когда я отлаживаю тестовый заказ, всегда равен нулю, даже если я настраиваю макет. – devfunkd