安装程序更新功能(CRUD)

时间:2019-11-27 10:52:51

标签: 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:一个兆ID标识符:13 //该ID不存在。

1 个答案:

答案 0 :(得分:0)

看起来JelentkezokRepository.GetAll()的行为不符合预期。

假设它返回一个集合

IEnumerable<Jelentkezok> GetAll();

这可能也需要设置。

//...

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

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

//...

为了使if条件在进行测试时按预期方式流动。