无效的强制转换Xunit反序列化错误

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

[当尝试通过Visual Studio运行使用xunit框架的测试用例时,我当前遇到以下错误。

System.InvalidCastException
  HResult=0x80004002
  Message=Specified cast is not valid.
  Source=xunit.execution.desktop
StackTrace:
   at Xunit.Serialization.XunitSerializationInfo.GetValue[T](String key) in C:\Dev\xunit\xunit\src\common\XunitSerializationInfo.cs:line 40
   at Xunit.Sdk.XunitTestCase.Deserialize(IXunitSerializationInfo data) in C:\Dev\xunit\xunit\src\xunit.execution\Sdk\Frameworks\XunitTestCase.cs:line 177
...

[我是我团队中唯一的一个在运行测试时看到此错误的人,并且我强制深度刷新了我的代码存储库,并重新安装了很多东西,但这个问题仍然存在。

我们最近将xunit框架从2.3.1升级到了2.4.1。我曾尝试将组件降级到2.3.1,这使我可以再次运行测试,但是对于为什么这个问题仅影响我仍然是个谜。

c# deserialization xunit xunit.net xunit2
1个回答
0
投票

好!所以。

反序列化错误可能很棘手,但简要说明序列化和反序列化非常重要。

简而言之,序列化的过程是将对象存储在内存中,然后将其放入函数中,这样可以轻松地(紧凑地)将该函数的输出传递给程序外部的系统。序列化的一种形式是保存简单游戏时,游戏状态会序列化并保存到文件中。反序列化是该函数的反函数,在该函数中,您将获取表示要在内存中存储的对象的一些数据,并通过一个函数来运行该函数,该函数将创建具有所有所需值的对象。

我敢打赌,这个问题是基于您的序列化和反序列化过程不匹配(不是彼此相反),或者是由于您使用的序列化过程可能导致代码更改出现问题。

例如,xunit.runner.visualstudio包更改了一些序列化过程。在大多数情况下,这很好,因为它也可以处理反序列化,但是,例如,如果其序列化过程是平坦的键值字典,那么任何名称冲突都可能导致反序列化失败。 由于您提到xunit组件已更新,所以我敢打赌那些更新已经开始使用您已经在测试类中使用过的变量名称。

这并不能完全解释为什么只有您看到问题而没有其他团队成员的原因,因为我想您的软件包也位于您的源代码管理中。它可能很简单,就像您的测试框架流程的运行顺序一样,由于您机器独特的多个因素,您只是不走运。

您的错误的解决方案,或者:

  • 更新您自己的代码库,以避免名称冲突。使用VS进行调试可能会帮助您查看序列化的对象并注意到任何重复的键条目。
  • 使用其他测试运行程序包(即不是xunit.runner.visualstudio)。
© www.soinside.com 2019 - 2024. All rights reserved.