无法从.NET类库xUnit测试加载Npgsql

问题描述 投票:1回答:1

我正在学习一些实体框架,并开始围绕它编写一些测试用例。

我遇到了一个问题,即我无法在测试用例中加载程序集,即使我可以在.net应用程序本身中这样做(并且程序集的版本相同)。

我得到的错误:

消息:System.IO.FileLoadException:无法加载文件或程序集'Npgsql.EntityFrameworkCore.PostgreSQL,Version = 2.0.2.0,Culture = neutral,PublicKeyToken = 5d8b90d52f46fda7'或其依赖项之一。强名称签名无法验证。程序集可能已被篡改,或者是延迟签名但未使用正确的私钥完全签名。 (HRESULT异常:0x80131045)

它适用于.net应用程序

我开始让Windows窗体应用程序运行正常。这是针对本地postgres DB使用SimpleInjector,EF Core,Npgsql。我有这个工作得很好(数据库创建,迁移等),DataContext(我的DbContext)被加载如下:

DbContextOptionsBuilder builder = new DbContextOptionsBuilder<DataContext>();
DbContextOptions<DataContext> options = (DbContextOptions<DataContext>)builder.UseNpgsql(connectionString).Options;
            return new DataContext(options,NLog.LogManager.GetCurrentClassLogger());

我可以做一个简单的测试,从DB中列出组织。目前,这是在Form1中完成的。

所以,进入测试(我遇到问题)

我将相同的依赖项添加到新的“Testing”类库(EF Core,Npgsql等)。我也依赖于EntityFrameworkTest项目,所以我可以引用它的模型。

我简化了测试用例(OrgDBTest),以便它尝试在它的构造函数中创建一个上下文。我这样做了,所以我知道我的问题与SimpleInjector无关。

我的期望是测试会运行,在其构造函数中创建一个DbContext。但是我无法让它加载程序集以便我可以创建我的DbContext ...以便我可以继续创建/玩测试。

代码在这里(非常小):https://github.com/scornflake/entityframework-learn

但是输了,因为看起来我在测试用例中和我在应用程序中做同样的事情,但是程序集加载看起来有些不同。

有任何想法吗?

c# entity-framework xunit npgsql
1个回答
0
投票

我没有根本原因,但从xUnit切换到NUnit使一切正常。我只能假设xUnit跑步者在装配加载/安全性方面存在一些潜在的差异(我希望我知道它是什么,但我已经花了很多时间才到达这一点!)

© www.soinside.com 2019 - 2024. All rights reserved.