繁体   English   中英

使用 Effort 进行单元/集成测试 EF - 未找到连接字符串

[英]Unit/integration testing EF with Effort - Connectionstring not found

我最近开始使用内存数据库 Effort 对我的实体框架实现进行单元测试。

一切正常,除非我尝试使用 CSV 数据加载器将 CSV 文件中的数据加载到数据库中。

关于如何配置 csvdataloader 的文档似乎很少/不足。

这是我编写的 NUnit 3.0 单元测试之一:

    [Test]
    public void GetBudgetIncomeItems_MultipleValidItems_ReturnList()
    {
        //Prepare and load data
        var dataLoader = new CsvDataLoader(@"<DirectoryOfUnitTestProject>\Data");
        var entityConnection = Effort.EntityConnectionFactory.CreateTransient("name=<NameOfMyCSVFileWithoutCSVExtension/DatabaseName>", dataLoader);
        _serviceContext = new ServiceContext(entityConnection);

        //Execute test
        var items = _query.GetBudgetIncomeItems(new Application {Id = 3});

        //Check results
        //Some assertions
    }

该行抛出异常:

Effort.EntityConnectionFactory.CreateTransient("name=<NameOfMyCSVFileWithoutCSVExtension/DatabaseName>", dataLoader);

异常详情:

System.ArgumentException 未被用户代码处理
HResult=-2147024809 Message=Connectionstring is not found 参数名称:entityConnectionString ParamName=entityConnectionString
源=努力堆栈跟踪:在Effort.EntityConnectionFactory.GetFullEntityConnectionString(字符串entityConnectionString)在Effort.EntityConnectionFactory.GetEffortCompatibleMetadataWorkspace在Effort.EntityConnectionFactory.CreateTransient(字符串&entityConnectionString)(字符串entityConnectionString,IDataLoader的DataLoader)在Infrastructure.EF6.UnitTests.PacsQueryTests`1.GetBudgetIncomeItems_MultipleValidItems_ReturnList () 在 \\PacsQueryTests.cs:line 36 InnerException:

任何帮助,将不胜感激...

更新

根据下面@Evk 的评论,首先使用代码时,您必须使用 DbConnection 和 DbConnectionFactory 类,而不是 EntityConnection 和 EntityConnectionFactory 类。

我更新的代码不会抛出任何错误,如下所示:

        [Test]
        public void GetBudgetIncomeItems_MultipleValidItems_ReturnList()
        {
            //Prepare and load data
            Effort.DataLoaders.IDataLoader csvDataLoader = new Effort.DataLoaders.CsvDataLoader(@"<DirectoryOfUnitTestProject>\Data");
            var dataLoader = new Effort.DataLoaders.CachingDataLoader(csvDataLoader,false);
            DbConnection dbConnection = Effort.DbConnectionFactory.CreateTransient(dataLoader);
            _serviceContext = new ServiceContext(dbConnection);

            //Execute test
            var items = _query.GetBudgetIncomeItems(new Application {Id = 3});

            //Check results
            //Some assertions
        }

我知道我参加这个聚会迟到了,但他们的帖子似乎回答了这个问题。 我找了半天。 希望张贴在这里会传播这个词。

https://github.com/zzzprojects/EntityFramework-Effort/issues/99

归功于上述原始帖子的作者。

EntityFrameworkEffortManager.ContextFactory = context => new MyContext();
var dataLoader = new EntityDataLoader();
DbConnection dbConnection = DbConnectionFactory.CreateTransient(dataLoader);
var effortContext = new MyContext(dbConnection);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM