0

尝试通过 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,这使我可以再次运行测试,但是为什么这个问题只影响我仍然是一个谜。

4

1 回答 1

0

好的!所以。

反序列化错误可能很棘手,但简要解释序列化和反序列化很重要。

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

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

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

这并不能完全解释为什么只有您看到问题而没有其他团队成员,因为我想您的包也在您的源代码控制中。它可能就像您的测试框架进程运行的顺序一样简单,但由于您的机器特有的多种因素,您会变得不走运。

解决您的错误,或者:

  • 更新您自己的代码库以避免名称冲突。使用 VS 进行调试可以帮助您查看序列化对象并注意任何重复的键条目。
  • 使用不同的测试运行程序包(即 not xunit.runner.visualstudio)。
于 2020-06-09T11:09:59.773 回答