gpt4 book ai didi

c# - 单元测试中的序列化异常

转载 作者:行者123 更新时间:2023-11-30 22:05:22 25 4
gpt4 key购买 nike

我的 Visual Studio (2010) 单元测试有问题。

每当出现任何问题并抛出一种类型的异常时,UnitTestAdapter 就会抛出 SerializationExceptions,告诉我他无法反序列化抛出的异常。

在我创建的单元测试中,这些大多是 System.Data.SqlServerCe.SqlCeExceptionNHibernate.MappingException

我不明白为什么会这样。研究告诉我,最常见的原因是 UnitTestAdapter 无法使用这些类型所在的程序集,但是当我查看 TestResults 文件夹时,我看到了所有需要的程序集,包括 System.Data.SqlServerCe。 dllNhibernate.dll

那么 - 我可以做些什么来调试它?我需要查看测试结果中的异常,以便它们以任何方式发挥作用。

最佳答案

运行 Visual Studio 单元测试 时,VSTestHost 是初始化和运行测试的进程。

一个新的 AppDomain 被创建并且 AppDomain 的基本目录被设置为单元测试 “Out” 目录,其中包含所有运行测试所需的程序集和依赖项。

测试目录名为“TestResults”,位于解决方案文件所在的同一目录中。在 “TestResults” 目录中,您会发现每个测试运行的一堆子目录。

单元测试完成后,执行线程返回到 VSTestHost 进程的默认 AppDomain。返回默认 AppDomain 的部分过程是在其调用上下文中反序列化对象。但是,BaseDirectory 已经重置回包含 VSTestHost 可执行文件的目录,即 "C:\Program Files\Microsoft Visual Studio {version}\Common7\IDE" .

这会导致反序列化失败,因为在 VSTestHost 目录中找不到被反序列化的类型。异常读取以下内容:

单元测试适配器抛出异常:类型未解析成员“xxx,xxx, Version=2.0.3370.22002, Culture=neutral, PublicKeyToken=null”

可能的破解方法是在“C:\Program Files\Microsoft Visual Studio {version}\Common7\IDE”中创建一个名为“UnitTestAssemblies”的目录。将所有必需的程序集复制到此目录中。然后手动编辑名为“VSTestHost.exe.config”的 VSTestHost 配置文件,将创建的目录包含在其探测路径中:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="PrivateAssemblies;PublicAssemblies;UnitTestAssemblies"/>
</assemblyBinding>

这将强制查找在反序列化期间为任何缺失类型创建的目录。

编辑

由于 sems 是一个程序集绑定(bind)问题,我建议您尝试 Assembly Binding Log Viewer (Fuslogvw.exe)分析资源加载过程,所以我希望你能发现问题的奥秘本质

关于c# - 单元测试中的序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com