Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to test a COM dependent object in C#

Tags:

c#

tdd

moq

I´m trying to do TDD with an object that has a dependency on a COM Interface. I though about mocking the COM interface, while doing development testing, and do it real on the integration tests.

However, I cannot mock the COM interface, I tried with Moq, and it throws an exception:

System.TypeLoadException was unhandled by user code Message=Could not load type 'Castle.Proxies.iTunesAppProxy' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. The type is marked as eligible for type equivalence, but either it has generic parameters, or it is not a structure, COM imported interface, enumeration, or delegate

Is it possible with other frameworks? How do you do TDD with COM dependent objects?

Thanks in advance!or delegate

like image 650
Iñaki Elcoro Avatar asked Jul 11 '10 17:07

Iñaki Elcoro


2 Answers

Try to set "Embed Interop Types" to FALSE for assembly that contains COM interface.

like image 152
LordJim Avatar answered Nov 15 '22 06:11

LordJim


I would suggest that you take ownership of the interface of the COM object, this is where Dependency Inversion Principle would come into play.

If you don't have access to the source, you will have to create your own abstraction that wraps the COM Object, otherwise you will have third-party calls throughout your code.

[EDIT]

Now the abstraction should be able to be mocked. The actual implementation of the wrapper will have the COM object as a HAS-A relationship.

You will then want to have an integration test for the implementation.

You need to treat the COM object itself as if it was something similar to a database or graphic rendering engine or a web service.

like image 2
Gutzofter Avatar answered Nov 15 '22 08:11

Gutzofter