【发布时间】:2013-05-28 19:48:10
【问题描述】:
我正在框架内测试服务。
为了初始化服务,我使用了模拟存储库对象。
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?有没有办法测试调用存储库的方法?
【问题讨论】:
-
你想测试什么?服务还是存储库?你在嘲笑 Repository,并断言它返回了什么?!
-
@lucky3 糟糕,我的意思是服务。
标签: c# unit-testing testing repository moq