我正在尝试对我的应用程序的 sql 函数进行单元测试,但是当我尝试验证该方法仅被调用一次时,它会给出一个错误,指出根本没有调用该方法。我正在使用 moq 来模拟我的不同上下文和界面。该方法位于“appointmentcontextsql”中。
试图改变模拟的模拟,但后来它无法转换为不同的类型。
测试:
[TestMethod]
public void CreateAppointment_IsValid()
{
var appointment = new Appointment(61,23,24, DateTime.Today);
using (var mock = AutoMock.GetLoose())
{
mock.Mock<IAppointmentContext>()
.Setup(x => x.CreateAppointment(appointment));
var cls = mock.Create<AppointmentContextSQL>();
cls.CreateAppointment(appointment);
mock.Mock<IAppointmentContext>()
.Verify(x => x.CreateAppointment(appointment), Times.Exactly(1));
}
}
测试方法:
public void CreateAppointment(Appointment appointment)
{
try
{
_conn.Open();
using (SqlCommand cmd = new SqlCommand("CreateAppointment", _conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@questionID", appointment.QuestionId);
cmd.Parameters.AddWithValue("@careRecipientID", appointment.CareRecipientId);
cmd.Parameters.AddWithValue("@volunteerID", appointment.VolunteerId);
cmd.Parameters.AddWithValue("@timestampAppointment", appointment.TimeStamp);
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
finally
{
_conn.Close();
}
}
预计单元测试会通过,因为我只是想看看该方法是否被正确调用,但 mock.time 方法告诉我它被调用了 0 次。