Unit testing Unity中的单元测试-获得InvalidCastException-为什么?如何修复?

Unit testing Unity中的单元测试-获得InvalidCastException-为什么?如何修复?,unit-testing,exception,unity3d,nunit,Unit Testing,Exception,Unity3d,Nunit,我试图在这里就S.O.提出的问题尽可能具体和有帮助。但对于这一个问题,这几乎没有任何意义,因为我完全不知道为什么会发生这种情况 它发生在任何/每次测试中(即使是“空白”测试)。我已经尝试(卸载和)更新unity没用 无论如何,下面是异常的堆栈跟踪: 2017.11.16 14:54:24.308 ERROR System.Reflection.TargetInvocationException: Uma exceção foi acionada pelo destino de uma cha

我试图在这里就S.O.提出的问题尽可能具体和有帮助。但对于这一个问题,这几乎没有任何意义,因为我完全不知道为什么会发生这种情况

它发生在任何/每次测试中(即使是“空白”测试)。我已经尝试(卸载和)更新unity没用

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

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)
2017.11.16 14:54:24.308错误系统。反射。目标职业例外:我们的目标是实现我们的目标。
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控制器,对象处理程序)
---国际例外情况处理职能指令手册---
em System.RuntimeMethodHandle.\u InvokeConstructor(对象[]参数,SignatureStruct&signature,IntPtr declaringType)
em System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr、Binder Binder、Object[]参数、CultureInfo区域性)
em System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr、Binder Binder、对象[]args、文化信息区域性、对象[]ActivationAttribute)
em System.Activator.CreateInstance(字符串assemblyName、字符串typeName、Boolean ignoreCase、BindingFlags bindingAttr、Binder Binder、Object[]args、CultureInfo区域性、Object[]ActivationAttribute、证据安全信息、StackCrawlMark&stackMark)
em System.Activator.CreateInstance(字符串assemblyName、字符串typeName、布尔ignoreCase、BindingFlags bindingAttr、Binder Binder、Object[]args、CultureInfo区域性、Object[]ActivationAttribute、证据securityInfo)
em System.AppDomain.CreateInstance(字符串assemblyName、字符串typeName、布尔ignoreCase、BindingFlags bindingAttr、Binder Binder、Object[]args、CultureInfo区域性、Object[]ActivationAttribute、证据安全属性)
em System.AppDomain.CreateInstanceAndUnwrap(字符串汇编名称、字符串类型名称、布尔型ignoreCase、BindingFlags bindingAttr、Binder Binder、对象[]参数、CultureInfo区域性、对象[]激活属性、证据安全属性)
em NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(字符串testAssemblyPath,IDictionary`2设置)
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过滤器)
em JetBrains.ReSharper.UnitTestRunner.nUnit30.builtinunitrunner.c_udisplayClass1.b_u0()
em JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltinUnitRunner.WithExtensionErrorHandling(IRemoteTaskServer服务器,操作)


这使得我在过去几天几乎没有进行(单元)测试,因此如果有人知道原因和/或解决方案,我将不胜感激。

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

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

为清晰起见正在更新

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

该框架的某些版本使用
System.Web.UI.ICallbackEventHandler
(.NET 2.0、3.5、4.0和4.5),而其他(.NET标准1.3和1.6)则不使用。因为NUnit正在寻找该接口,所以您正在引用使用它的一个构建。因为它不可用,所以您所在的平台不包含它

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


不幸的是,在问题的统一方面,我帮不了什么忙。

这会很奇怪,因为在它突然开始报告测试不确定并给出异常之前,我能够毫无问题地进行单元测试。但我已经在编程中看到了足够多的奇怪的东西,几乎从未放弃过这种可能性;特别是当我没有其他线索的时候。我将尝试适配器,如果失败,将根据提示提供一些其他内容,并将尽快报告。现在,在这里,吃一块饼干(+1)。=)赞成。。。那没用。不管问题是什么,我不认为是版本不匹配,因为1)单元测试过去是有效的。2) 似乎没有其他人会遇到这个问题(如果确实是这样的版本不匹配的话,我希望这一切都会发生)。3)测试适配器不工作;我仍然得到完全相同的例外。真奇怪。这是我能告诉你的。。。1) 缺少的接口方法仅由NUnit v3驱动程序使用,该驱动程序是引擎的一部分2)该接口和方法在某些平台上不可用。您的测试平台是什么?我正在PC(windows 10 64位)上测试,并尝试为单机版(windows)和android进行部署设置。两者都失败了,只有一个例外。我不确定我在单元测试工作时使用的是哪个部署平台(至少有一个工作;可能/可能两者都工作),但我认为它应该/通常在bot上工作