gpt4 book ai didi

unit-testing - Unity 中的单元测试 - 获取 InvalidCastException - 为什么?以及如何解决?

转载 作者:行者123 更新时间:2023-12-04 05:17:21 24 4
gpt4 key购买 nike

我在 S.O. 上的问题中尽量做到具体和有帮助。但是对于这个,嗯,这几乎没有任何意义,因为我绝对没有任何关于为什么会发生这种情况的最微弱的线索。

它发生在任何/每个测试(甚至是“空白”测试)上。而且我已经尝试过(卸载和)更新统一。 - 没用。

无论如何,这是异常的堆栈跟踪:

2017.11.16 14:54:24.308   ERROR System.Reflection.TargetInvocationException: Uma exceção foi acionada pelo destino de uma chamada.
System.Reflection.TargetInvocationException: Uma exceção foi acionada pelo destino de uma chamada. ---> System.InvalidCastException: Não é possível converter um objeto do tipo 'NUnit.Engine.CallbackHandler' no tipo 'System.Web.UI.ICallbackEventHandler'.
em NUnit.Framework.Api.FrameworkController.LoadTestsAction..ctor(FrameworkController controller, Object handler)
--- Fim do rastreamento de pilha de exceções internas ---
em System.RuntimeMethodHandle._InvokeConstructor(Object[] args, SignatureStruct& signature, IntPtr declaringType)
em System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
em System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
em System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
em System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo)
em System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
em System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
em NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
em NUnit.Engine.Runners.DirectTestRunner.LoadPackage()
em NUnit.Engine.Runners.AbstractTestRunner.Load()
em NUnit.Engine.Runners.MasterTestRunner.LoadPackage()
em NUnit.Engine.Runners.AbstractTestRunner.EnsurePackageIsLoaded()
em NUnit.Engine.Runners.MasterTestRunner.NUnit.Engine.ITestRunner.Explore(TestFilter filter)
em JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass1.<RunTests>b__0()
em JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action)

这让我在过去几天没有(单元)测试的情况下编写了很多代码,所以如果有人对原因和/或解决方案有任何想法,将不胜感激。

最佳答案

Resharper 正在使用 NUnit 引擎运行测试,但引擎仅支持针对 .NET 2.0 到 4.5 编写的测试。您使用的框架是 .NET Standard 版本之一。我可以通过查看堆栈跟踪并看到它没有对 System.Web.UI.ICallbackEventHandler 的引用来判断这一点。

您应该能够使用最新安装的 NUnit 3 VS 测试适配器在测试资源管理器中运行测试。

为清晰起见更新...

毫无疑问,正在使用平台不支持的 nunit 框架版本。这就是这里的关键。

框架的一些构建使用 System.Web.UI.ICallbackEventHandler (.NET 2.0、3.5、4.0 和 4.5)而其他(.NET Standard 1.3 和 1.6)则没有。由于 NUnit 正在寻找该接口(interface),因此您正在引用使用它的构建之一。由于它不可用,因此您在一个不包含它的平台上。

一个简单的解决方法是让您自己定义接口(interface),完全按照 Microsoft 的定义复制它。您不必实现它,因为您使用的框架就是这样做的。当然,由于框架/平台不兼容,这可能会导致其他故障,因此最好首先解决兼容性问题。

不幸的是,我对 Unity 方面的问题没有任何帮助。

关于unit-testing - Unity 中的单元测试 - 获取 InvalidCastException - 为什么?以及如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335493/

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