フレームワーク内でサービスをテストしています。
サービスを初期化するために、モック リポジトリ オブジェクトを使用しています。
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
. リポジトリ メソッドに設定された変数は returnnull
を呼び出し、ビジネス ロジックの実行時に最終的にエラーをスローします。
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
ですか?リポジトリを呼び出すメソッドをテストする方法はありますか?