c# - 为更新功能设置模拟(CRUD)

标签 c# unit-testing mocking moq

我尝试为更新功能设置一个模拟,

public class JelentkezokService : IJelentkezokService
{
    IJelentkezokRepository JelentkezokRepository { get; set; }

    public Jelentkezok Update(Jelentkezok jelentkezo)
    {
        if (JelentkezokRepository.GetAll().Any(x => x.Id == jelentkezo.Id))
        {
            return JelentkezokRepository.Update(jelentkezo);
        }
        //The ID is not exist
        else throw new Exception($"A megadott jelentkező ID nem létezik: {jelentkezo.Id}");
    }
}

测试该函数是否被调用但它用于服务中的异常。有什么想法吗?

[TestFixture]
public class JelentkezokBLTests
{
    Mock<IJelentkezokRepository> JelentkezokRepositoryMock;

    [Test]
    public void JelentkezokUpdateMeghivva()
    {
        //Arrange
        JelentkezokRepositoryMock = new Mock<IJelentkezokRepository>();

        var input = new DA.Jelentkezok()
        {
            Id = 13,
            Nev = "Kis Béla",
            Varos = "Győr",
            Utca = "Kodály Zoltán u. 15.",
            SzuletesiDatum = new DateTime(1982, 11, 19),
            Iranyitoszam = 9030,
            Ferfi = true,
        };
        var mockedResult = new DA.Jelentkezok()
        {
            Id = 13,
            Nev = "Kis Anita",
            Varos = "Győr",
            Utca = "Kodály Zoltán u. 15.",
            SzuletesiDatum = new DateTime(1982, 11, 19),
            Iranyitoszam = 9030,
            Ferfi = false,
        };

        JelentkezokRepositoryMock.Setup(x => x.Update(input)).Returns(mockedResult);

        JelentkezokService service = new JelentkezokService(JelentkezokRepositoryMock.Object);
        //Act
        var updateJelentkezo = service.Update(input);

        //Assert
        //Assert.That(input, Is.Not.Null);
        JelentkezokRepositoryMock.Verify(v => v.Update(input), Times.AtLeastOnce);

}

我有错误 消息:System.Exception:A megadott jelentkező ID nem létezik: 13//ID 不存在。

最佳答案

看起来 JelentkezokRepository.GetAll() 没有按预期运行。

假设它返回一个集合

IEnumerable<Jelentkezok> GetAll();

这可能也需要设置。

//...

var item = new DA.Jelentkezok() {
    Id = 13,            
};
var all = new [] { item };

JelentkezokRepositoryMock.Setup(x => x.GetAll()).Returns(all);

//...

为了让 if 条件在执行测试时按预期流动。

关于c# - 为更新功能设置模拟(CRUD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59068524/

相关文章:

java - 对对象图中的孤立对象进行单元测试

java单元测试输入异常

c# - 如何循环访问通过 Windows 控件访问的选中列表框?

ruby-on-rails - BDD with Cucumber 和 rspec - 什么时候这是多余的?

java - 使用 Mockito 模拟 JdbcTemplate 的数据源

node.js - SINON 单元测试 stub 构造函数

c# - 解决方案的一个或多个单元测试项目

c# - .NET Regex Negative Lookahead - 我做错了什么?

c# - SMO "Restore failed for Server"从文件恢复备份

c# - .Net核心2.2 : how to change characterset in EF codefirst approach