debugging AutoMock要模拟的示例类型必须是接口、委托或非密封的非静态类

f2uvfpb9  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(94)

当模拟“autoMocker. instance();“与Moq. AutoMock. Automocker。HeliumController类的构造函数采用多个接口。我如何找到哪个特定的接口或构造函数无法模拟?

{System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
 ---> System.NotSupportedException: Type to mock must be an interface, a delegate, or a non-sealed, non-static class.
   at Moq.Guard.IsMockable(Type type)
   at Moq.Mock`1..ctor(MockBehavior behavior, Object[] args)
   at Moq.Mock`1..ctor(MockBehavior behavior)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at Moq.AutoMock.Resolvers.MockResolver.Resolve(MockResolutionContext context)
   at Moq.AutoMock.AutoMocker.Resolve(Type serviceType, Object initialValue)
   at Moq.AutoMock.AutoMocker.Resolve(Type serviceType)
   at Moq.AutoMock.AutoMocker.Get(Type serviceType)
   at Moq.AutoMock.AutoMocker.<CreateArguments>b__58_0(ParameterInfo x)
   at System.Linq.Enumerable.SelectArrayIterator`2.ToArray()
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Moq.AutoMock.AutoMocker.CreateArguments(Type type, BindingFlags bindingFlags)
   at Moq.AutoMock.AutoMocker.CreateInstance(Type type, Boolean enablePrivate)
   at Moq.AutoMock.AutoMocker.CreateInstance[T](Boolean enablePrivate)
   at Moq.AutoMock.AutoMocker.CreateInstance[T]()
   at Helium.Api.Tests.API.v2.HeliumControllerSearchTests..ctor()
aoyhnmkz

aoyhnmkz1#

不幸的是,这将是一个反复试验的过程,检查构造函数接受的类型,然后看看是否有任何类型不符合要求--我首先要看看你正在使用的密封类,因为这可能是原因所在。接口、非密封、非静态和委托--这些都可以被模仿。
我注意到你在异常中没有任何行号。我猜可能是在“Release”模式下测试的东西,所以符号不可用。通常在“Release”模式下的异常堆栈有发生异常的实际行号-它可能有助于在“Release”模式下编译和运行测试,以查看实际的行号。这可以缩小范围。
这里是Moq中抛出不可模仿异常的地方。看起来他们可以很容易地将实际的类型名称添加到异常中,只是没有发生。如果我是你,I'd file an issue with the Moq folks并要求他们更新以在异常中包含类型名称。如果他们对此没有意见,似乎提交给他们并使产品变得更好是一个很容易的pull请求,同时解决你的问题

v09wglhw

v09wglhw2#

在我的情况下,<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />可以解决这个问题。

相关问题