Имам следния метод, който се опитвам да тествам, но моите променливи са нулеви, дори ако се опитам да ги настроя.
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);
}
Има ли все пак за тестване на "var order"? Опитах и SetupGet и изглежда не работи, Moq е нов за мен, така че ме извинете предварително, ако това е нещо просто и лесно.
order
, който искате да тествате? - person Andrew Whitaker   schedule 09.11.2014_orderRepositoryMock.Object
във вашата услуга. Или вие? Ако това е _orderService, което се опитвате да тествате, тогава не се подигравайте на това, а само на зависимости. Така че извикайте Cancel с действителен guid, напр. Guid.NewGuid(). - person Mikko Viitala   schedule 09.11.2014опцията
работи за мен
- person Andrew Whitaker   schedule 09.11.2014orderId
така, ще трябва да предадете това и на методаCancel
. Също така се уверете, чеorderId
е свързано с фалшивата поръчка - person Andrew Whitaker   schedule 09.11.2014