chevron-thin-right chevron-thin-left brand cancel-circle search youtube-icon google-plus-icon linkedin-icon facebook-icon twitter-icon toolbox download check linkedin phone twitter-old google-plus facebook profile-male chat calendar profile-male
Welcome to Typemock Community! Here you can ask and receive answers from other community members. If you liked or disliked an answer or thread: react with an up- or downvote.
0 votes

I am attempting to fake an instance of class and ignore the constructor for said class. When i step into the code the first constructor below is called even though i have the constructwillbe.ignored set. Any ideas as to why, I don't think i am doing anything tricky here.

Heres the code i am using

ProductCatalog target = Isolate.Fake.Instance<ProductCatalog>(Members.CallOriginal, ConstructorWillBe.Ignored);

Product Catalog is a class that has 3 constructors as such below

public ProductCatalog(string siteName, string catalogName, ICredentials credential)

public ProductCatalog(string siteName, string catalogName)
: this(siteName, catalogName, System.Net.CredentialCache.DefaultNetworkCredentials)
{ }

public ProductCatalog(string catalogName, IProductCatalogDao dao)
asked by Locke12 (600 points)

4 Answers

0 votes

You're right, this should work. Unfortunately I'm not able to reproduce this issue here, would it be possible for you to post the rest of ProductCatalog? Or perhaps make a small project with a reproduction?

Thank you.
answered by igal (5.7k points)
0 votes
Using v6.03

I am attempting to fake an instance of a Windows form like this:

var fakeForm = Isolate.Fake.Instance<Form>(Members.ReturnRecursiveFakes, ConstructorWillBe.Ignored, BaseConstructorWillBe.Ignored);

when I run the test, Isolator complains:

TypeMock.TypeMockException :
*** Typemock cannot evaluate new instance constructors of mocked type.

The stack trace looks like this which clearly shows the Forms..ctor() is being called.

at e1.a()
at h1.a(String A_0, Mock A_1, gy A_2, Int32& A_3)
at h1.a(String A_0, Object A_1, Object A_2, Type& A_3, String A_4)
at System.Windows.Forms.Form..ctor()
at if.CreateFakeInstance[T](Members behavior, Constructor constructorFlag, Constructor baseConstructorFlag, Type baseType, Object[] ctorArgs)
at if.Instance[T](Members behavior, ConstructorWillBe constructorBehavior, BaseConstructorWillBe baseConstructorBehavior)
at DataLibTests.ConnectionManagerTests.ParseConnectionStringStyleSettings() in c:dev7SourceTestsDataLibTestsConnectionManagerTests.cs:line 41
at TypeMock.MockManager.a(String A_0, String A_1, Object A_2, Object A_3, Boolean A_4, Object[] A_5)
at TypeMock.InternalMockManager.getReturn(Object that, String typeName, String methodName, Object methodParameters, Boolean isInjected)
at DataLibTests.ConnectionManagerTests.ParseConnectionStringStyleSettings() in c:dev7SourceTestsDataLibTestsConnectionManagerTests.cs:line 38
answered by ksummerlin (4k points)
0 votes
Just for kicks I tested this using NUnit-x86 instead of the 64-bit NUnit. The test runs in the 32-bit NUnit but not in the 64-bit NUnit.

So this issue may be related to the 64-bit version of TypeMock only. Hope this helps.
answered by ksummerlin (4k points)
0 votes
Unfortunately I was not able to reproduce this issue. I've tried running it using x64 and x86 but the error hasn't occoured.

Let's take it offline - please send a test project to support AT so I'll be able to continue investigating this issue.

On a side note - if you create a recursive fake object you do not need to specific that the c'tor will be ignored - it would be ignored by default.
In fact because recursive fake is the default mode when creating a fake instance you only need to following line:
var fakeForm = Isolate.Fake.Instance<Form>();
answered by dhelper (11.9k points)