Я пытаюсь написать модульные тесты для унаследованного кода VB с .NET Framework 4.5.2 в VS 2017. У тестируемых классов есть зависимости от классов, которые не реализуют интерфейсы или не определяют переопределенные методы, поэтому я установил Smocks 0.7.3 для поддержки Moq.Тем не менее, мои простые тестовые случаи с примерами из документации по Smocks терпят неудачу с исключением из Mono.Cecil: System.InvalidOperationException: Operation is not valid due to the current state of the object.
Я не смог найти примеры Smocks, написанные на VB, и я новичок в .NETи VB, так что это может быть просто глупой ошибкой кодирования.Буду признателен за советы по использованию Smocks в VB.
Вот тестовый класс VB:
Imports Smocks
Imports Moq
<TestClass()> Public Class SmocksTest
<TestMethod()> Public Sub BasicSmockTestStringEquals()
Smock.Run(
Sub(context)
context.Setup(Function() It.IsAny(Of String).Equals(It.IsAny(Of String))).Returns(True)
Dim result = "Foo".Equals("Bar")
Assert.IsTrue(result)
End Sub)
End Sub
<TestMethod()> Public Sub BasicSmockTestDateTimeNow()
Smock.Run(
Sub(context)
context.Setup(Function() DateTime.Now).Returns(New DateTime(2000, 1, 1))
Dim result = DateTime.Now.Year
Assert.Equals(2001, result)
End Sub)
End Sub
End Class
Вот трассировка стека:
Server stack trace:
at Mono.Cecil.ModuleDefinition.ProcessDebugHeader()
at Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader)
at Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters)
at Mono.Cecil.ModuleReader.CreateModule(Image image, ReaderParameters parameters)
at Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters)
at Mono.Cecil.AssemblyDefinition.ReadAssembly(String fileName, ReaderParameters parameters)
at Smocks.IL.AssemblyRewriter.Rewrite(String path)
at Smocks.AppDomains.AssemblyLoaderFactory.GetLoaderForAssembly(AssemblyName assemblyName)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Smocks.AppDomains.IAssemblyLoaderFactory.GetLoaderForAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.LoadAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.LoadAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.LoadAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.LoadAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.LoadAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.LoadAssembly(AssemblyName assemblyName)
at Smocks.AppDomains.AssemblyResolver.OnAssemblyResolve(Object sender, ResolveEventArgs args)
at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName) at Smocks.AppDomains.AppDomainContext.InvokeLambda[T](SerializableLambda`1 serializableLambda, Object[] arguments)
at Smocks.AppDomains.AppDomainContext.InvokeSerializableLambda[T](SerializableLambda`1 serializableFunc, Object target, Object[] arguments)
at Smocks.AppDomains.AppDomainContext.Invoke[T](Action`1 action, T parameter)
at Smocks.Smock.RunAction(Action`1 action, Configuration configuration)
at Smocks.Smock.Run(Configuration configuration, Action`1 action)
at Smocks.Smock.Run(Action`1 action)
at Bestpass.EM.DataImports.Tests.SmocksTest.BasicSmockTestStringEquals() in C:\...\SmocksTests.vb:line 7