Я тестирую службу в рамках.Тестирование службы с использованием объектов mock-репозитория
Чтобы инициализировать службу, я использую mock объекты репозитория.
ServiceTest.cs
private IRepository _repository;
private IService _service;
private List<Object> _objects;
[TestInitialize]
public void Initialize()
{
_repository = new Mock<IRepository>().Object;
_service = new Service(repository);
_objects = new List<Object>()
{
new Object { Name = "random", ID = 1 },
new Object { Name = "not so random", ID = 1},
new Object { Name = "random", ID = 2 },
new Object { Name = "not so random", ID = 2}
};
//attempt at mocking the repository
_repository.Setup(r => r.GetObjects(It.IsAny<string>(), It.IsAny<int>())).Returns(_objects.Where(o => o.Name == _objects.Name && o.ID == _objects.ID).ToList());
}
[TestMethod]
public void GetObjects_ReturnObjectsList()
{
//Arrange
var name = "random";
//Act
var objects = _service.RetrieveObjects(name, 2);
//Assert
Assert.AreEqual(name, objects.Single().Name);
}
Однако, когда я протестировать сервис, я получаю ArgumentNullExceptions
. Переменные, установленные для метода репозитория, возвращают null
и, в конечном счете, вызывают ошибку при запуске бизнес-логики.
Service.cs
public List<Objects> RetrieveObjects(string name, int id)
{
var getObjects = repository.GetObjects(name, id); //getObjects return null
DoLogic(getObjects); //ArgumentNullException is thrown here
return getObjects;
}
Я посмотрел информацию на насмешливые хранилищах, но кажется, что у меня будет много для настройки только для тестирования. Мне интересно, стоит ли установка.
Почему я получаю ArgumentNullExceptions
? Есть ли способ протестировать методы, которые вызывают репозитории?
Что вы пытаетесь протестировать? Сервис или репозиторий? Вы издеваетесь над репозиторием и утверждаете, что он возвращает ?! –
@ lucky3 Упс, я имел в виду сервис. –