0

我正在尝试对我的应用程序的 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 次。

4

0 回答 0