Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 746 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Can not instantiate proxy...Could not find a parameterless constructor

#1
I am trying to create a unit test using Moq which tests the [MongoDB.AspNet.Identity V2][1] provider. This line is giving me grief:

var appUser = new Mock<PreRegistrationMVC.Models.ApplicationUser>();
var userStore = new Mock<MongoDB.AspNet.Identity.UserStore<PreRegistrationMVC.Models.ApplicationUser>>();

It seems the userStore won't instantiate properly here is the error.

Castle.DynamicProxy.InvalidProxyConstructorArgumentsException was unhandled by user code
HResult=-2147024809
Message=Can not instantiate proxy of class: MongoDB.AspNet.Identity.UserStore`1[[MVC.Models.ApplicationUser, MVC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].
Could not find a parameterless constructor.
Source=Moq
StackTrace:
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxyInstance(Type proxyType, List`1 proxyArguments, Type classToProxy, Object[] constructorArguments)
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors)
at Moq.Proxy.CastleProxyFactory.CreateProxy(Type mockType, ICallInterceptor interceptor, Type[] interfaces, Object[] arguments)
at Moq.Mock`1.<InitializeInstance>b__2()
at Moq.PexProtector.Invoke(Action action)
at Moq.Mock`1.InitializeInstance()
at Moq.Mock`1.OnGetObject()
at Moq.Mock.GetObject()
at Moq.Mock.get_Object()
at Moq.Mock`1.get_Object()
at MVC_Tests.Identity.Accounts.AccountController_Test.TestSuccessfulRegister() in c:\Users\Tim\Documents\Visual Studio 2013\Projects\PreRegistrationApp\MVC_Tests\Identity\Accounts\AccountController_Test.cs:line 108
InnerException:


I am completely new to Moq so I am looking for:
What type of settings are needed for Moq to instantiate this? Is there something about the UserStore class that won't play well with Moq?

Thanks for reading.


[1]:

[To see links please register here]

Reply

#2
MOQ is good for mocking interfaces, but does not work so well with concrete classes. So instead of mocking concrete class, ask for the inteface:

var userStore = new Mock<IUserStore<PreRegistrationMVC.Models.ApplicationUser>>();

Also `ApplicationUser` should be POCO, so no need to mock it, just create its instance without MOQ and use in tests.
Reply

#3
I had this problem. I had written...

var x = new Mock<Concrete>();

... instead of ...

var x = new Mock<IConcrete>();
Reply

#4
You can try referring Mock behavior,as shown below

Mock<testClass>(MockBehavior.Strict, new object[] {"Hello"});

Reply

#5
Add an empty constructor to your `ApplicationUser` class.
Reply

#6
I know this is a late response, but I was looking for an answer and couldn't find exactly what I needed, but when creating a mock, you can pass the parameters to your wanted constructor.

So for example if you have class like this:

public class Foo
{
private readonly Boo _boo;

public Foo(Boo boo)
{
_boo = boo;
}
}



You can mock it like this:

private readonly Mock<Foo> _foo = new Mock<Foo>(new Mock<Boo>().Object);

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through