Dear Sir,
Thank you for your interest in our products.
I am afraid that I have to disappoint you. The design with the extension methods is highly intentional and is not going to change.
I understand the unit testing need, and there is always a bit of issue. But you need to understand how it actually works, and I think you will actually like it. From what you wrote, I have a feeling that you have misunderstood which way the control goes.
All important OPC-related functionality is available through the IEasyDAClient interface. It's implementation that is exposed to you is the EasyDAClient object.
There is just one method in this interface for each primary OPC functionality. For example, the reading is represented by the ReadMultipleItems method. This is the most generic one, which accepts an array of so-called argument objects, and returns an array of result objects.
There are many (really many) extension methods built upon ReadMultipleItems method. Some of them have the same name, and are basically overloads to allow the arguments be passed to the method in different ways. There are then extension methods like ReadItem, which takes this concept further, and provides reading of just one item (as a special case), with many overloads as well.
There are two important things to notice here:
1) The extension methods are defined on the interface, not on its concrete implementation.
2) The extension methods are simple wrappers that perform in-memory manipulations of the arguments and results. The actual OPC operation is performed only through the interface that is implicitly passed to the method. The code around does not do other OPC operations or anything alike.
With this knowledge, your mocking becomes actually quite easier. You just have to mock the principal methods, those on the IEasyDAClient interface, and not all the overloads (I think that their number can go to hundreds). And you have a guarantee that the extension method code is always the same. The unit-testing purist would probably object, but the is highly practical, and works.
There are actually multiple internal implementations of the interface, and the extension methods are used with them too, but this is just to explain the design - it does not affect you.
Zbynek Zahradnik