Мы используем Moq для unit test наших классов обслуживания, но зацикливаемся на том, как тестировать ситуации, когда метод службы вызывает другой метод обслуживания того же класса. Я попытался настроить метод, вызываемый на виртуальный, но все еще не мог понять, что делать тогда в Moq. Например:
public class RenewalService : IRenewalService
{
//we've already tested this
public virtual DateTime? GetNextRenewalDate(Guid clientId)
{
DateTime? nextRenewalDate = null;
//...<snip> a ton of already tested stuff...
return nextRenewalDate;
}
//but want to test this without needing to mock all
//the methods called in the GetNextRenewalDate method
public bool IsLastRenewalOfYear(Renewal renewal)
{
DateTime? nextRenewalDate = GetNextRenewalDate(renewal.Client.Id);
if (nextRenewalDate == null)
throw new Exceptions.DataIntegrityException("No scheduled renewal date, cannot determine if last renewal of year");
if (nextRenewalDate.Value.Year != renewal.RenewDate.Year)
return true;
return false;
}
}
В приведенном выше примере наш метод GetNextRenewalDate довольно сложный, и мы уже его тестировали. Однако мы хотим протестировать более простой IsLastRenewalOfYear без необходимости издеваться над всем необходимым для GetNextRenewalDate. В принципе, мы просто хотим высмеять GetNextRenewalDate.
Я понимаю, что могу создать новый класс, который переопределяет GetNextRenewalDate и тестирует новый класс, но есть ли способ, которым я могу использовать Moq, чтобы сделать это проще?