Я новичок, чтобы написать Unit Tests. Поэтому я боролся.Проблема в модульных испытаниях и использовании Moq. Возвраты
Мне нужно вставить продукт через внешний WebService. Затем WebService вернет строку, необходимую для обновления продукта.
Это мой ApiController
:
public class ProductController : ApiController
{
private IProductRepository _ProductRepository;
private IWebService _WebService;
public ProductController(IProductRepository productRepository, IWebService webService)
{
_ProductRepository = productRepository;
_WebService = webService;
}
public HttpResponseMessage Add(string title)
{
using (TransactionScope scope = new TransactionScope())
{
Product product = new Product
{
Title = title
};
this._ProductRepository.Add(product);
// WebService will return a string
string result = this._WebService.Add(product.ID, DateTime.Now);
product.ServiceResult = result;
this._ProductRepository.Update(product);
scope.Complete();
}
return Request.CreateResponse(HttpStatusCode.Created);
}
}
мне было интересно, как я должен написать модульный тест для этого кода?
Я попытался написать это следующим образом: (с NUnit, MOq)
[TestFixture]
public class ProductControllerShould : AssertionHelper
{
private Mock<IWebService> _WebService;
private Mock<IProductRepository> _ProductRepository;
[SetUp]
public void Setup()
{
_WebService = new Mock<IWebService>();
_ProductRepository = new Mock<IProductRepository>();
}
[Test]
public void ReturnCreatedOnAdd()
{
_WebService.Setup(b => b.Add(1, DateTime.Now))
.Returns("0");
var controller = new ProductController(_ProductRepository.Object,
_WebService.Object);
var result = controller.Add("Lumia");
Expect(result, Is.EqualTo(HttpStatusCode.Created));
}
}
, но когда я отладки тест, результат в этой строке равно нулю, что не является правильным.
string result = this._WebService.Add(product.ID, DateTime.Now);
Не должна ли эта строка обрабатывать поведение _WebService.Add() и возвращать «0»?
_WebService.Setup(b => b.Add(1, DateTime.Now))
.Returns("0");
Я знаю, что я пишу тест неправильно, но я не знаю, что мне делать.
Спасибо.
Спасибо @Maksim. Я этого не знал. Это был отличный момент. Тем не менее, я применил изменения, но все равно результат равен нулю. –
@NavidKh, что вы использовали? –
Решения № 1 и 2 –