I use Xunit and Moq to test my application. I am new at this topic...
Is it possible to test the method DBConnector(...) ?
And if yes, how?
I try it with mock... but the following line causes problems: Exception: System.NullReferenceException
eventAggregator.GetEvent<UpdateSomeStateEvent>().Subscribe((x) => UpdateSomeState(x));
Update: Added the code for mock setup
System.NullReferenceException presumably fixed by this.
But now i get this exception:
Unsupported expression: p => p.Subscribe (It.IsAny<Action>()). Non-overridable members (here: PubSubEvent.Subscribe) may not be used in setup / verification expression.
My code to be tested
public DBConnector(MyContext context , ILogger loggerFacade , IEventAggregator eventAggregator)
{
mContext = context;
mLoggerFacade = loggerFacade;
mLoggerFacade.Log(LogLevel.Debug , "Some text");
eventAggregator.GetEvent<UpdateSomeStateEvent>().Subscribe((x) => UpdateSomeState(x));
}
private void UpdateSomeState(SomeState x)
{
SomeState = x;
}
public class DBConnectorClassData : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
var mLogger = new Mock<ILogger>();
ILogger logger = mLogger.Object;
var mEA = new Mock<IEventAggregator>();
Mock<UpdateSomeStateEvent> mEvent = new Mock<UpdateSomeStateEvent>();
Action<SomeState> callback = null;
mEA.Setup(e => e.GetEvent<UpdateSomeStateEvent()).Returns(mEvent.Object);
IEventAggregator eventAggregator = mEA.Object;
var ctxt = new MyContext();
yield return new object[]
{
new DBConnector(ctxt, logger, eventAggregator)
};
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}