I have the following scenario:
public class Child : Parent
{
private int _eventTypeId;
public override Dictionary<string, dynamic> Execute(IDynamicDatabaseConnection dbConn, IDbTransaction dbTrans)
{
_eventTypeId = GetEventType(dbConn, dbTrans);
}
}
public abstract class Parent : ParentInterface
{
protected int GetEventType(IDynamicDatabaseConnection dbConn, IDbTransaction dbTrans) => GetItemId("EventType", "User Initiated", dbConn, dbTrans);
protected int GetItemId(string param1, string param2, IDynamicDatabaseConnection dbConn, IDbTransaction dbTrans) =>
dbConn.Query<int>(
$@"myQuery",
dbTrans).FirstOrDefault();
public abstract Dictionary<string, dynamic> Execute(IDynamicDatabaseConnection dbConn, IDbTransaction dbTrans);
}
public interface ParentInterface
{
Dictionary<string, dynamic> Execute(IDynamicDatabaseConnection dbConn, IDbTransaction dbTrans);
}
How should I be mocking the GetEventType
method from my child class?
I use mocking in the following way.
var connMock = A.Fake<IDynamicDatabaseConnection>();
var transMock = A.Fake<IDbTransaction>();
A.CallTo(() => connMock.BeginTransaction()).Returns(transMock);
A.CallTo(() => dbConnMock.Query<string>(null, null, null, A<bool>._, null, null)).WithAnyArguments().Returns(new List<string>() { "AfterSaveSPName" });
Update: Adding the Child Class Test Method which I am testing.
[TestMethod]
public void Initiate_Intake_Should_Insert_FormMode_Initiate()
{
// Arrange
Dictionary<string, dynamic> childParameters = new Dictionary<string, dynamic>
{
{Key, -1}
};
var dynamicAssembly = A.Fake<IDynamicAssembly>();
var connMock = A.Fake<IDynamicDatabaseConnection>();
var transMock = A.Fake<IDbTransaction>();
var fakeInitiateIntake = A.Fake<InitiateBase>(options => options.Implements<IInitiateBase>());
A.CallTo(() => connMock.BeginTransaction()).Returns(transMock);
A.CallTo(fakeInitiateIntake).Where(call => call.Method.Name == "GetEventType")
.WithReturnType<int>()
.Returns(197);
// Act
var child = new Child(childParameters, dynamicAssembly);
child.Execute(connMock, transMock);
// Assert
initiateParameters["Key"].Equals(1234);
}