如何模拟可跟踪的存储库?

时间:2018-07-16 13:08:36

标签: c# unit-testing mocking

我第一次进行单元测试。我想模拟一个可跟踪的存储库。它与模拟普通存储库不同吗?我很怀疑,因为我正在创建一个简单的存储库,而使用可跟踪存储库的要测试的方法没有接受它。您能否提供一个简单的示例来模拟可跟踪的存储库。 我正在使用DI通过这样的存储库:

   public CountryService(ITrackableRepository<Country> repository) : base(repository)
    {
    }

,我想测试是否通过Upsert方法插入了国家/地区:

public void UpsertCountries(Country[] countries)
        {
            countries.ToList().ForEach(country =>
            {
                if (Repository.Queryable().Any(c => c.ForeignId == country.ForeignId))
                {
                    UpdateCountry(country);
                }
                else
                {
                    Repository.Insert(country);
                }
            });
        }

提前谢谢。...

1 个答案:

答案 0 :(得分:1)

[Test]
public void YourTest()
{
    //Arrange
    var mockRepo = new Mock<ITrackableRepository<Country>>();
    var service = new CountryService(mockRepo.Object);
    var countryArray = new Country[]{};
    //Act
    service.UpdateCountry(countryArray);
    //Assert
    mockRepo.Verify(repo => repo.Insert(It.IsAny<Country>()), Time.Once);
}

如果您想为您的仓库设置一些行为,您可以按照以下方式进行操作:

mockRepo.Setup(repo => repo.PropertyName).Returns(//return something)

希望它会给您一些见识