How to Mock an internal interface with NMock2?
I was attempting to mock an internal interface with NMock2 and no matter what I tried I continued to get the following failure.
01 02 03 04 05 06 07 08 09 10 | Test 'M:ExampleOfIVT.PersonTests.FirstTest' failed: Type is not public, so a proxy cannot be generated. Type: ExampleOfIVT.IPerson Castle.DynamicProxy.Generators.GeneratorException: Type is not public, so a proxy cannot be generated. Type: ExampleOfIVT.IPerson at Castle.DynamicProxy.DefaultProxyBuilder.AssertValidType(Type target) at Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options) at NMock2.Monitoring.CastleMockObjectFactory.GetProxyType(CompositeType compositeType) at NMock2.Monitoring.CastleMockObjectFactory.CreateMock(Mockery mockery, CompositeType typesToMock, String name, MockStyle mockStyle, Object[] constructorArgs) at NMock2.Internal.MockBuilder.Create(Type primaryType, Mockery mockery, IMockObjectFactory mockObjectFactory) at NMock2.Mockery.NewMock[TMockedType](IMockDefinition definition) at NMock2.Mockery.NewMock[TMockedType](Object[] constructorArgs) PersonTests.cs(59,0): at ExampleOfIVT.PersonTests.FirstTest() |
Obviously I have a project, ExampleOfIVT, and a test project, ExampleOfIVTTests.
All the Google searching suggested that I should be adding these lines to my AssemblyInfo.cs file in the ExampleOfIVT project but these line did NOT work.
Please not that I downloaded NMock2 from here: http://sourceforge.net/projects/nmock2/
1 2 | [assembly: InternalsVisibleTo("Mocks")] [assembly: InternalsVisibleTo("MockObjects")] |
Turns out that they have changed to use Castle.DynamicProxy and so the only assembly I needed was this one.
1 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] |
Return to C# Unit Test Tutorial
[...] How to Mock an internal interface with NMock2? [...]