I'm trying to mock this method.
Task<Response> SendTemplatedEmail<T>(TemplatedEmail<T> templatedEmail, EmailRecipient<T> recipient)
where T : TemplateData;
This is the closest I've got that makes logical sense to me.
this.mockSender.Setup(x => x.SendTemplatedEmail<It.IsSubtype<TemplateData>>(It.IsAny<It.IsSubtype<TemplateData>>, It.IsAny<It.IsSubtype<TemplateData>>));
But I get the following error:
CS0311: The type TemplatedEmail<Moq.It.Is.IsSubtype<TemplateData>> cannot be used as type parameter 'T' in the generic type or method IEmailSender.SendTemplatedEmail<T> ( TemplatedEmail<T>, EmailRecipient<T>>)' There is no implicit reference conversion from 'TemplateEmail<Moq.It.IsSubtype<TemplateData>> to TemplateData)
Here are the relevant class.
public class TemplatedEmail<T>
where T : TemplateData
{ ... }
In plain English, the method takes a templatedEmail parameter of type TemplatedEmail<T> where T is a subclass of TemplateData. It also takes second generic parameter EmailRecipient of the same type T.