具有自动映射器和microsfot伪造框架的单元测试用例

问题描述

我正在使用下面的api代码的Microsoft Fake框架编写单元测试用例。我已经为查询创建器类中的函数创建了MyQueryBuilder,GetMyFunctionDetails,Execute函数的shim对象。但是,在返回行result.ToList()

时出现以下错误

对象引用未设置为对象的实例

我认为映射器无法将数据库实体映射到DTO。我不确定如何处理。任何帮助都会很棒。

public IList<MyDTO> GetAPI(string ID,bool IsActive)
{
    using (var ctx = new DataContext())
    {
        var mapper = AutomapperBuilder.MyMapperFunction(ctx);
        MyQueryBuilder obj = new MyQueryBuilder(ctx);
        obj.GetMyFunctionDetails(id,true);
        List<DatabaseEntityObject> lst = new List<DatabaseEntityObject>();
        lst = obj.Execute().AsQueryable().ToList();
        var result = mapper.ProjectTo<MyDTO>(lst.AsQueryable());
        return result.ToList();
    }
}

下面是单元测试用例

[TestMethod]
public void Test_ResultOk()
{
    using (ShimsContext.Create())
    {
        //Arrange                
        List<DatabaseEntityObject> lstTaskDetailsDTO = null;
        using (var ctx = new DataContext())
        {
            MyQueryBuilder objQueryBuilder = new MyQueryBuilder(ctx);
            ShimMyQueryBuilder.AllInstances.GetMyFunctionDetailsstringBoolean = (_,__,___) =>
            {
                return objQueryBuilder;
            };
            ShimMyQueryBuilder.AllInstances.Execute = (_) =>
            {
                lstTaskDetailsDTO = new List<DatabaseEntityObject>()
                {
                    new DatabaseEntityObject
                    {
                        projectid = PID
                        name = Name
                    }
                };
                return lstTaskDetailsDTO;
            };
            //Act
            var controller = new MyController();
            var result = controller.GetMyAPI(ID,true);
            //Assert
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)