In order to create a very testable codebase, I abstracted away a certain external dependency. To be precise, this dependency is actually implemented by a vendor SDK and it communicates directly with a hardware. As such, this is the interface:
public interface IHardware
void Send(IMessage message);
event EventHandler<MessageEventArgs> OnMessage;
(The communication with the hardware is fully assyncronous)
As soon as this is initialized, events may be raised by the hardware (through the the OnMessage event). Client code can send messages any time, and possible responses will be received in the form of events.
Now, this very simple interface needs to be implemented; The implementation is just a delegation to the actual SDK class. The problem is this: how I write tests to provoke the proper implementation?