How to test a COM dependent object in C#

后端 未结 4 1177
后悔当初
后悔当初 2021-01-06 02:51

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 th

相关标签:
4条回答
  • 2021-01-06 03:33

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

    0 讨论(0)
  • 2021-01-06 03:50

    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.

    0 讨论(0)
  • 2021-01-06 03:50

    OK, I thing there is no straightforward way of doing that, not sure that some of mocking frameworks could mock COM.

    What I have in my mind..

    You have some COM interface, ISomeThing and COM object implements this interface CoSomeThing, this some real implementation. You should implemenent yet another COM component, that would implement same interface, but actually just mocking it - CoSomeThingMock.

    In your code you instantiate CoSomeThingMock, instead of CoSomeThing and use it.

    var component = new CoSomeThingMock();
    var testObject = new Tested(component);
    
    0 讨论(0)
  • 2021-01-06 03:53

    You need to add the following in the initialization part like explained here https://code.google.com/p/moq/issues/detail?id=254

    Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.Add(typeof (TypeIdentifierAttribute));
    
    0 讨论(0)
提交回复
热议问题