gpt4 book ai didi

unit-testing - 使用 Moq 模拟返回值的存储库

转载 作者:行者123 更新时间:2023-12-04 04:45:15 25 4
gpt4 key购买 nike

如何在模拟接受对象的存储库上设置我的测试方法?

这是我到目前为止:

服务.cs

    public int AddCountry(string countryName)
{
Country country = new Country();
country.CountryName = countryName;
return geographicsRepository.SaveCountry(country).CountryId;
}

测试文件
    [Test]
public void Insert_Country()
{
//Setup
var geographicsRepository = new Mock<IGeographicRepository>();

geographicsRepository.Setup(x => x.SaveCountry(It.Is<Country>(c => c.CountryName == "Jamaica"))); //How do I return a 1 here?

GeographicService geoService = new GeographicService(geographicsRepository.Object);

int id = geoService.AddCountry("Jamaica");

Assert.AreEqual(1, id);
}
SaveCountry(Country country);返回一个整数。

我需要做两件事:
  • 第一个测试,我需要告诉设置返回一个整数 1。
  • 我需要创建第二个测试 Insert_Duplicate_Country_Throws_Exception() .在我的设置中,我如何告诉存储库在执行以下操作时抛出错误:
    int id = geoService.AddCountry("Jamaica");
    int id = geoService.AddCountry("Jamaica");

  • 框架:
  • 单位。
  • 起订量
  • ASP.NET MVC - 存储库模式。
  • 最佳答案

    您的第一个测试应如下所示:

    [Test]
    public void Insert_Country()
    {
    Mock<IGeographicRepository> geographicsRepository = new Mock<IGeographicRepository>();
    GeographicService geoService = new GeographicService(geographicsRepository.Object);

    // Setup Mock
    geographicsRepository
    .Setup(x => x.SaveCountry(It.IsAny<Country>()))
    .Returns(1);

    var id = geoService.AddCountry("Jamaica");

    Assert.IsInstanceOf<Int32>(id);
    Assert.AreEqual(1, id);
    geographicsRepository.VerifyAll();
    }

    第二个测试应该是这样的:
    [Test]
    public void Insert_Duplicate_Country_Throws_Exception()
    {
    Mock<IGeographicRepository> geographicsRepository = new Mock<IGeographicRepository>();
    GeographicService geoService = new GeographicService(geographicsRepository.Object);

    // Setup Mock
    geographicsRepository
    .Setup(x => x.SaveCountry(It.IsAny<Country>()))
    .Throws(new MyException());

    try
    {
    var id = geoService.AddCountry("Jamaica");
    Assert.Fail("Exception not thrown");
    }
    catch (MyException)
    {
    geographicsRepository.VerifyAll();
    }
    }

    关于unit-testing - 使用 Moq 模拟返回值的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4481212/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com