我有一个项目,我使用此方法将其添加到数据库:public Messages addItem(Item item){Messages resultMessage = Messages.Success;using (IUnitOfWork unitOfWork = new UnitOfWork()){IItemRepository itemRep = new...
                
我有一个项目,我使用此方法将其添加到数据库:
public Messages addItem(Item item)
{
    Messages resultMessage = Messages.Success;
    using (IUnitOfWork unitOfWork = new UnitOfWork())
    {
        IItemRepository itemRep = new ItemRepository(unitOfWork);
        try
        {
            itemRep.Insert(item);
            unitOfWork.Commit();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.StackTrace);
            resultMessage = Messages.DB_Failure;
        }
    }    
    return resultMessage;   
}
现在,我必须为此方法编写单元测试,以检查项目是否正在添加到数据库中.我不知道我应该怎么做,有人可以帮助我吗?
解决方法:
您的代码与ItemRepository和UnitOfWork实现相结合.理想情况下,您应该将它们分离并使用模拟来验证是否调用了正确的方法.
可能的解决方案:
>使存储库成为您工作单元的属性
>不要直接创建工作单元,为此使用工厂
>使工厂成为您班级的依赖项
>在您的测试中,将工厂的模拟传递给您正在测试的类,返回模拟工作单元
>在您的UoW模拟上返回存储库的模拟
>验证是否在Repository mock和Unit of Work模拟中调用了正确的方法
这将是一个例子.我使用Moq作为模拟框架.并将测试方法放在课堂上,但你可以得到这个想法:
class MyClass
{
    private readonly IUnitOfWorkFactory _factory;
    public MyClass(IUnitOfWorkFactory factory)
    {
        _factory = factory;
    }
    public Messages addItem(Item item)
    {
        Messages resultMessage = Messages.Success;
        using (IUnitOfWork unitOfWork = _factory.GetUnitOfWork())
        {
            try
            {
                unitOfWork.ItemRep.Insert(item);
                unitOfWork.Commit();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                resultMessage = Messages.DB_Failure;
            }
        }
        return resultMessage;
    }
    public void Test()
    {
        // Arrange
        var factoryMock = new Mock<IUnitOfWorkFactory>();
        var uowMock = new Mock<IUnitOfWork>();
        var repositoryMock = new Mock<IItemRepository>();
        factoryMock.Setup(f => f.GetUnitOfWork()).Returns(uowMock.Object);
        uowMock.Setup(u => u.ItemRep).Returns(repositoryMock.Object);
        var sut = new MyClass(factoryMock.Object);
        // Act
        var item = new Item();
        sut.addItem(item);
        // Assert
        repositoryMock.Verify(r => r.Insert(item), Times.Once);
        uowMock.Verify(u => u.Commit(), Times.Once);
    }
}
 
本文标题为:c# – 如何对将数据项添加到数据库的方法进行单元测试?
				
        
 
            
        - C# TextBox数据绑定的方法 2022-12-31
 - C# VB.NET 将Html转为Excel 2023-05-26
 - C#线程同步的几种方法总结 2023-02-08
 - c# 实现发送邮件的功能 2023-03-04
 - Unity使用LineRender实现签名效果 2023-05-06
 - C# 执行Javascript脚本的方法步骤 2023-05-12
 - 一篇文章教会你用Unity制作网格地图生成组件 2023-04-27
 - C#如何访问共享文件夹或者磁盘 2022-12-11
 - C#连接SQL数据库和查询数据功能的操作技巧 2023-04-15
 - C#算法之回文数 2023-05-16
 
						
						
						
						
						
				
				
				
				