Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is it error? Smocks throwing Could not load type System.TypeLoadException #28

Open
SunMaungOo opened this issue Jan 2, 2017 · 1 comment

Comments

@SunMaungOo
Copy link

I have try to use Smocks in a static method but it is throwing System.TypeLoadException exception. I have added the stack trace below. Is it the error on smocks or the error on my code? Could you please advise me the step I need to perform (if the error in on my application)?

The class that I am trying to mock is something like this.

public class MyClass
{
        private MyClass()
        {

        }

        public static ObservableCollection<Data> Foo(string name, ref    List<SqlParameter> parameters, out System.Exception exception)
       {
                    ObservableCollection<Data> dataList=new ObservableCollection<Data>();

                   //operation code
            
                 return dataList;
       }

}

Result StackTrace:

at System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type)
   at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
   at System.Reflection.Assembly.GetType(String name, Boolean throwOnError)
   at Smocks.IL.Resolvers.AssemblyTypeContainer.GetType(String name)
   at Smocks.IL.Resolvers.TypeResolver.Resolve(TypeReference type, GenericBindingContext bindingContext)
   at Smocks.IL.Resolvers.MethodResolver.ParametersMatch(MethodBase method, TypeReference[] parameterTypes, GenericBindingContext bindingContext)
   at Smocks.IL.Resolvers.MethodResolver.<>c__DisplayClass5_0.<FindMethod>b__2(MethodBase method)
   at System.Linq.Enumerable.<>c__DisplayClass6_0`1.<CombinePredicates>b__0(TSource x)
   at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext()
   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
   at Smocks.IL.Resolvers.MethodResolver.FindMethod(IEnumerable`1 candidates, String name, TypeReference[] parameterTypes, Boolean isGeneric, GenericBindingContext bindingContext)
   at Smocks.IL.Resolvers.MethodResolver.Resolve(MethodReference methodReference, GenericBindingContext bindingContext)
   at Smocks.IL.Resolvers.MethodResolver.Resolve(MethodReference methodReference)
   at Smocks.IL.ILGeneratorInstructionVisitor.VisitInlineTok(Instruction instruction, MethodReference methodReference)
   at Smocks.IL.InstructionExtensions.VisitInlineTok[T](Instruction instruction, IInstructionVisitor`1 visitor)
   at Smocks.IL.InstructionExtensions.Accept[T](Instruction instruction, IInstructionVisitor`1 visitor)
   at Smocks.IL.DynamicMethodCompiler.AddInstructions(IILGenerator generator, IEnumerable`1 instructions, Dictionary`2 locals)
   at Smocks.IL.DynamicMethodCompiler.Compile[T](TypeReference[] parameters, IEnumerable`1 instructions, IEnumerable`1 variables)
   at Smocks.IL.ExpressionDecompiler`1.Decompile(MethodBody body, Instruction instruction, Object target, Int32 expectedStackSize, Int32 stackEntriesToSkip)
   at Smocks.IL.ExpressionDecompiler`1.Decompile(MethodBody body, Instruction instruction, Object target)
   at Smocks.IL.SetupExtractor.<GetSetupsFromInstructions>d__10.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Smocks.Smock.CreateAssemblyRewriter(Delegate delegate, Configuration configuration)
   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 MyProjectTest.UnitTestSearch.TestSmocks() in C:\Users\Admin\Documents\Visual Studio 2015\Projects\MyProject\MyProject\MyProjectTest\UnitTest1.cs:line 26
Result Message:	
Test method MyProjectTest.UnitTestSearch.TestSmocks threw exception: 
System.TypeLoadException: Could not load type 'System.Collections.Generic.List`1<System.Data.SqlClient.SqlParameter>' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
@SunMaungOo
Copy link
Author

It seem Smocks cannot handle "ref" in the parameter.

After I change the method signature to

public static ObservableCollection<Data> Foo(string name,List<SqlParameter> parameters, out System.Exception exception) , it is now working as expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant