模拟方法因NULL而失败

时间:2015-10-12 11:05:41

标签: c# unit-testing mocking moq

由于NULL引用异常导致我的被测系统上的方法失败,我遇到了问题。我可以看到问题所在,但我不确定如何解决它。

我正在测试的课程如下:

public class PaymentService
{
        public PaymentService(ICompanyService companyService,  //Other dependencies)
       {
            _companyService = companyService;
            //Other dependencies being assigned
       }

        public string SetupPayment(User user, ProductVariant product, 
                                   string successUrl, string failureUrl, 
                                   string cancelUrl, string errorUrl)
       {
           var company = _companyService.GetCompanyById(user.GetAppointment().RegistrationNumber);
       }
}

PaymentService类有许多其他的交互,但为了这个问题,这就是最重要的。

如您所见,要在GetCompanyId中调用CompanyService方法,需要满足传递user.GetAppointment().RegistrationNumber的参数。 User.GetAppointment的实施如下:

    public Appointment GetAppointment()
    {
        // Check if user has any appointments
        if (Appointments == null || Appointments.Count == 0) return null;
        return Appointments.First().Appointment;
    }

在我的单元测试中,我现在正在尝试测试SetupPayment方法,但每次运行时,它都会在运行user.GetAppointment方法时失败,因为它始终返回{{1} }}。

我在单元测试中的模拟框架已经设置好了(引起人们对null的嘲笑:

_companyService

1 个答案:

答案 0 :(得分:1)

问题是您的User没有Appointments,因此GetAppointment返回null。创建User时,您可以设置Appointments吗?如果没有,我建议您在IUser类添加一个界面 - User,然后传递它,这样就可以传递IUser的模拟并模拟方法GetAppointment