我试图模拟泛型方法的返回类型以匹配特定的具体类型,但我似乎无法让这个转换成功:
public T Get<T>(string key)
{
if (typeof(T) == typeof(GenericIsAuthenticatedResponse) && key == "1234")
return GetGenericIsAuthenticatedResponse();
return default(T);
}
private static GenericIsAuthenticatedResponse GetGenericIsAuthenticatedResponse()
{
return new GenericIsAuthenticatedResponse
{
AuthCode = "1234",
Email = "email@email.com"
};
}
所以我的问题是如何让mock方法返回GenericIsAuthenticatedResponse?
答案 0 :(得分:1)
由于泛型如何工作,这不起作用。如果要返回特定类型,则需要为T
提供过滤器:
public T Get<T>(string key) where T: GenericIsAuthenticatedResponse
否则,请勿将泛型用于返回类型:
public object Get<T>(string key)
{
if (typeof(T) == typeof(GenericIsAuthenticatedResponse) && key == "1234")
return GetGenericIsAuthenticatedResponse();
return default(T);
}
如果你完全确定T
将是GenericIsAuthenticatedResponse
(鉴于它是测试),你可以这样做:
public T Get<T>(string key)
{
if (typeof(T) == typeof(GenericIsAuthenticatedResponse) && key == "1234")
return (T)GetGenericIsAuthenticatedResponse();
return default(T);
}
答案 1 :(得分:-2)
我最后应用了一些横向思维(或者根据你的POV提出的bodge)和序列化/反序列化的Json来实现这个目标:
public T Get<T>(string key)
{
if (typeof(T) == typeof(GenericIsAuthenticatedResponse) && key == "1234")
return JsonConvert.DeserializeObject<T>(GetGenericIsAuthenticatedResponse());
return default(T);
}
private static string GetGenericIsAuthenticatedResponse()
{
var r = new GenericIsAuthenticatedResponse
{
Username = "email.email.com",
AuthCode = "1234"
};
return JsonConvert.SerializeObject(r);
}