最小单元测试:系统.moq . proxy . castlexyfactory的TypeInitializationEx

本文关键字:proxy castlexyfactory TypeInitializationEx moq 系统 单元测试 | 更新日期: 2023-09-27 18:06:53

我使用Moq作为单元测试的模拟库。

它似乎很难找到温莎城堡图书馆,因为它给了我这个错误:

System.TypeInitializationException : Une exception a été levée par l'initialiseur de type pour 'Moq.Mock`1'.
  ----> System.TypeInitializationException : Une exception a été levée par l'initialiseur de type pour 'Moq.Proxy.CastleProxyFactory'.
  ----> System.IO.FileNotFoundException : Impossible de charger le fichier ou l'assembly 'Castle.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' ou une de ses dépendances. Le fichier spécifié est introuvable.
   à Moq.Mock`1.<InitializeInstance>b__24_0()
   à Moq.PexProtector.Invoke(Action action)
   à Moq.Mock`1.InitializeInstance()
   à Moq.Mock`1.OnGetObject()
   à Moq.Mock.GetObject()
   à Moq.Mock.get_Object()
   à Moq.Mock`1.get_Object()
   à TecLib.Common.Tests.Infrastructure.CqrsRepositoryBaseTest.SetUp() dans C:'Users'Ludovic'Documents'Visual Studio 2015'Projects'TEC2'TecLib.Common.Tests'Infrastructure'CqrsRepositoryBaseTest.cs:ligne 38
--TypeInitializationException
   à Moq.Proxy.CastleProxyFactory..ctor()
   à Moq.Mock`1..cctor()
--FileNotFoundException
   à Moq.Proxy.CastleProxyFactory..cctor()

这是触发错误的测试之一。代码运行得非常好。这是触发错误的Moq图书馆,因为它似乎无法找到温莎城堡图书馆的某些原因。

    [SetUp]
    public void SetUp()
    {
        _eventStore = new Mock<IEventStore>();
        _eventDispatcher = new Mock<IEventDispatcher>();
        _entityFactory = new Mock<IEntityFactory>();
        _repository = new CqrsAddressRepository(_entityFactory.Object, _eventStore.Object, _eventDispatcher.Object);
        _addressInfo1 = new AddressInfo("400 chemin Jette", "", "", "Farnham", "J0J2B0", "Quebec", "Canada");
        _addressInfo2 = new AddressInfo("322 rue Principale E", "", "", "Farnham", "J2N1L7", "Quebec", "Canada");
    }

这些是我的项目包

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
  <package id="Castle.Windsor" version="3.3.0" targetFramework="net461" />
  <package id="Moq" version="4.5.21" targetFramework="net461" />
  <package id="NUnit" version="3.4.1" targetFramework="net461" />
</packages>

这些测试以前工作得很好。我不知道是什么改变了,使他们现在抛出这个错误。

可能安装4.6.1 .net框架?

请帮忙!

最小单元测试:系统.moq . proxy . castlexyfactory的TypeInitializationEx

你的错误信息显示:

先。FileNotFoundException:不可能删除文件l 'assembly的城堡。Core, Version=3.3.0.0, Culture=neutral,PublicKeyToken=407dd0808d44fbdc' '你可以使用这些数据作为交换。文件[cn] [cn] [cn]

但是你的包有以下配置:

<package id="Castle.Core" version="3.3.3" targetFramework="net461" />
  1. 您确定单元测试项目和代码都使用了正确的程序集版本吗?
  2. 在你的App.config文件中有任何程序集绑定重定向吗?https://stackoverflow.com/a/31013829/283787
  3. 他们都使用相同的NuGet包吗?
  4. 如果失败,你可以使用FusionLogger来查看组件是如何被解决的。
  1. 检查您的Package文件夹并删除所有未使用的dll。
  2. 比较包配置文件VS App.Config,并确保版本maches

我遇到了一个与您的问题非常相似的问题,唯一的区别是我已经构建了一个自定义库来生成我的解决方案中的几个假业务模型,以便在另一个测试中重用它。

我不知道为什么,但是Moq的旧版本dll出现在我的一个单元测试项目中作为参考。

这就是解决我的问题的方法:

  1. 删除测试项目中所有Moq NuGet包,检查包文件以确保没有Moq和Castle的包配置。
  2. 检查您的测试项目引用,以确保没有遗留引用也被遗忘。如果Visual Studio没有把事情做对,你可以自己删除它。
  3. 关闭Visual Studio并导航到您的解决方案目录并查找名为"packages"的文件夹。检查是否有一个名为Moq的文件夹。如果有,请删除。
  4. 通过Package Manager Console或通过"Manage Nuget packages"选项为依赖于Moq库的每个测试项目重新安装Moq包。