Unit testing 如何使用MVC和Moq通过存储库服务获取db数据

Unit testing 如何使用MVC和Moq通过存储库服务获取db数据,unit-testing,model-view-controller,dependency-injection,mocking,integration-testing,Unit Testing,Model View Controller,Dependency Injection,Mocking,Integration Testing,我需要通过服务从数据库中检索数据,以便测试捕获的数据的结构有效性。 i、 e.db数据指定捕获的连接字符串(按特定顺序)的部分大小,我模拟了这些部分。所以不用担心。 但我不想嘲笑服务的数据。 我想实际检索数据库数据,对于不同的客户机和不同的场景,数据库数据可能会发生很大的变化,也可能会定期发生变化。 因此,更改每个场景的模拟数据是不可行的 该服务实现了一个接口,还注入了数据访问层的接口 我确实将“CallBase”设置为true,但我不会返回db数据。 请帮忙。 谢谢 公共接口I\u PartD

我需要通过服务从数据库中检索数据,以便测试捕获的数据的结构有效性。 i、 e.db数据指定捕获的连接字符串(按特定顺序)的部分大小,我模拟了这些部分。所以不用担心。
但我不想嘲笑服务的数据。
我想实际检索数据库数据,对于不同的客户机和不同的场景,数据库数据可能会发生很大的变化,也可能会定期发生变化。
因此,更改每个场景的模拟数据是不可行的

该服务实现了一个接口,还注入了数据访问层的接口

我确实将“CallBase”设置为true,但我不会返回db数据。 请帮忙。 谢谢

公共接口I\u PartDao
{
出厂清单(出厂清单_零件尺寸);
}
公共级GXL_零件尺寸
{
公共int?ID{get;set;}
公共int?PartLength{get;set;}
公共int?排序器{get;set;}
公共GXL_零件尺寸()
{
this.ID=null;
this.PartLength=null;
this.SortOrder=null;
}
}
//服务层
公共接口I_PartBo
{
出厂清单(出厂清单_零件尺寸);
}
公共类PartBo:I_PartBo
{
//用于注入Dao服务(Dao针对MSSQL数据库处理Ado CRUD操作)
私人I_PartDao PartDao;
公共部分(I_PartDao_Part)
{
this.PartDao=dao_部分??抛出新的ArgumentNullException(“dao_部分”);
}
公共出厂清单(出厂清单_零件尺寸)
{
返回这个.PartDao.List(out\u partsize);
}
}
[测试类]
公共类GXL_串联结构_测试
{
ExBool result=new ExBool();//处理错误消息和状态的类
私人名单零件尺寸;
[测试方法]
公共无效测试第1部分长度与第1部分的结构匹配()
{
//安排
var mockService=new Mock();
//这是从发布回控制器的数据中检索出来的,……但对于此时此地,只有一个本地填充的strign var
var concatenatedString_part1=“ABC”;
//表演
//mockService.CallBase=true;
模拟服务
.设置(x=>x.列表(超出零件尺寸))
.返回(结果);
//断言
Assert.AreEqual(连接字符串_part1,partSizes[0].PartLength);
}
}

我认为有一种方法可以实现我想要的,那就是使用moq

但是,, 通过使用普通的具体类,按照通常的(sansdi)方式检索db数据。 i、 e

NamespaceX.GLX\u SetupDao dao=new NamespaceX.GLXSetupDao(“数据源=笔记本电脑-a;初始值
Catalog=aaaa;集成安全性=True;“”;
GLX\U SetupBo BO服务=新的GLX\U SetupBo(dao);
结果=boService.List(超出列表大小);
public interface I_PartDao
{
    ExBool List(out List<GXL_PartSizes> _PartSizes);
}

public class GXL_PartSizes
    {
        public int? ID { get; set; }
        public int? PartLength { get; set; }
        public int? SortOrder { get; set; }

        public  GXL_PartSizes()
        {
            this.ID = null;
            this.PartLength = null;
            this.SortOrder = null;
        }
    }


// Service Layer
public interface I_PartBo
{
    ExBool List(out List<GXL_PartSizes> _PartSizes);
}

public class PartBo : I_PartBo
{
    // For the injection of the Dao services (Dao handles the Ado CRUD operations against MSSQL dbase)
    private I_PartDao PartDao;

    public PartBo(I_PartDao dao_Part)
    {
        this.PartDao = dao_Part ?? throw new ArgumentNullException("dao_Part");
    }

    public ExBool List(out List<GXL_PartSizes> _PartSizes)
    {
        return this.PartDao.List(out _PartSizes);
    }
}


[TestClass]
public class GXL_ConcatenatedStructures_Test
{
    ExBool result = new ExBool();   // A class to handle error messages and statuses
    private List<GXL_PartSizes> partSizes;


    [TestMethod]
    public void Test_Part_1_Length_matches_dbStructure_for_part1()
    {
        // Arrange
        var mockService = new Mock<I_PartBo>();

        // This is retrieved from the data posted back to the controller,..but for here and now, just a local populated strign var
        var concatenatedString_part1 = "ABC";

        // Act
        //mockService.CallBase = true;

        mockService
            .Setup(x => x.List(out partSizes))
            .Returns(result);


        //  Assert
        Assert.AreEqual(concatenatedString_part1, partSizes[0].PartLength);
    }
}
NamespaceX.GLX_SetupDao dao = new NamespaceX.GLXSetupDao("data source=LAPTOP-a; Initial 
                                                          Catalog=aaaa; Integrated Security=True;");
GLX_SetupBo boService = new GLX_SetupBo(dao);
result = boService.List(out List<GXL_PartSizes> sizes);