다음 메소드를 사용하여 테스트하려고하지만 변수를 설정하려고해도 변수가 null입니다.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);
}
어쨌든 "var order"를 테스트 할 수 있습니까? 나는 SetupGet도 시도해 보았고, 작동하지 않는 것처럼 보였습니다. Moq은 나에게 새로운 것이므로, 이것이 간단하고 쉬운 일이라면 사전에 용서하십시오.
'주문'은 테스트하고 싶은가요? –
'_orderRepositoryMock.Object'를 서비스에 삽입하는 방법이 명확하지 않습니다. 아니면? 테스트하려는 서비스가 _orderService라면 조롱하지 마십시오. 의존성 만 있습니다. 실제 안내와 함께 취소를 호출하십시오 (예 : Guid.NewGuid(). –
나는 그것을 시험해보고 싶다. 마음이 열렸다. 문제는 테스트 순서를 디버깅 할 때 모의 설정을하더라도 항상 null입니다. – devfunkd