我正在学习一些实体框架,并开始围绕它编写一些测试用例。
我遇到了一个问题,即我无法在测试用例中加载程序集,即使我可以在.net应用程序本身中这样做(并且程序集的版本相同)。
我得到的错误:
消息:System.IO.FileLoadException:无法加载文件或程序集 ' Npgsql.EntityFrameworkCore.PostgreSQL,版本= 2.0.2.0, Culture = neutral,PublicKeyToken = 5d8b90d52f46fda7'或其中一个 依赖。强名称签名无法验证。该 装配可能已经被篡改,或者是延迟签署但没有 使用正确的私钥完全签名。 (HRESULT的例外情况: 0x80131045)
我开始让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());
我能够对数据库中的组织进行简单测试。目前,这是在Form1中完成的。
我将相同的依赖项添加到新的&#34;测试&#34;类库(EF Core,Npgsql等)。我也依赖于EntityFrameworkTest项目,所以我可以引用它的模型。
我已经简化了测试用例(OrgDBTest),以便它尝试在其构造函数中创建一个上下文。我已经这样做了,所以我知道我的问题与SimpleInjector无关。
我的期望是测试会运行,在其构造函数中创建一个DbContext。但是我无法加载程序集以便我可以创建我的DbContext ...以便我可以继续创建/玩测试。
代码在这里(非常小): https://github.com/scornflake/entityframework-learn
但是输了,因为看起来我在测试用例中做的和我在应用程序中一样,但是装配加载看起来有点不同。
有什么想法吗?
答案 0 :(得分:0)
我没有根本原因,但从xUnit切换到NUnit会使一切正常。我只能假设xUnit跑步者在装配加载/安全方面存在一些潜在的差异(我希望我知道它是什么,但我已经花了很多时间才到达这一点!)