我有一个项目,我使用此方法将其添加到数据库: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# – 如何对将数据项添加到数据库的方法进行单元测试?


基础教程推荐
- unity scrollRect实现按页码翻页效果 2023-02-16
- DataGridView自动设定列宽和行高 2023-05-22
- C# 特殊的string类型详解 2022-10-27
- c#实现选择排序的示例 2023-03-13
- C#实例化和静态类对象调用对比 2023-05-31
- deepin命令行安装_在基于Debian开发的Deepin上快速搭建.net core开发环境 2023-09-27
- unity 如何修改材质属性和更换shader 2023-04-14
- 利用C#实现绘制出地球旋转效果 2023-07-18
- C#中char和string的入门使用教程 2023-03-08
- C# 字符串、数组和List的截取和转换实例 2022-11-26