3 c# testing unit-testing moq repository
我正在框架内测试服务。
为了初始化服务,我使用模拟存储库对象。
服务测试.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。设置到存储库方法的变量会调用 return null,并最终在运行业务逻辑时抛出错误。
服务.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?有没有办法测试调用存储库的方法?
您只需要设置正在测试的内容,以便按照您的安排执行以下操作:
var repository = new Mock<IRepository>();
repository.Setup(x => x.GetObjects(It.IsAny<string>()).Returns("whatever getobjects should be returned, maybe a mock object or string");
var service = new Service(repository.Object());
//Continue your test