Moq不能模拟没有特定泛型类型的方法
本文关键字:泛型类型 方法 不能 模拟 Moq | 更新日期: 2023-09-27 18:15:47
我有一个测试,找到从BaseClass
继承的所有类。BaseClass
有一个使用泛型方法的属性:
abstract class BaseClass
{
public MyTools Tools { get; set;}
public abstract List<TEntity> GetAll();
public virtual IList<TEntity> Convert<TEntity, TEntityOther>()
{
//...
}
}
class MyTools
{
IList<T> List<T>();
}
然后,我需要模拟T List<T>()
方法。该方法用于Create
法。例如:
class MyClass: BaseClass<MyEntity>
{
public override List<MyEntity> GetAll()
{
var x = this.MyTools.List<SomeClass>();
return this.Convert<MyEntity, SomeClass>(x);
}
}
我不知道GetAll
中使用什么类型来调用List
方法。
这是我的测试:
var xobjects = this.GetTypeInNamespace(myAssembly, typeof(BaseClass<>));
foreach(var obj in xobjects)
{
var myTools = new Mock<MyTools>();
//here is my problem
myTools.Setup(x => x.List< ANY >()).Returns(new List< ANY >());
var iobj = this.CreateInstance(obj);
iobj.MyTools = myTools.Object;
var result = iobj.GetType().GetMethod("GetAll").Invoke(iobj, null);
((ICollection)result).Count.Should().Be(0);
}
我如何为任何T设置方法List <T>
?
我不知道T
是什么类型,我也不关心它是什么类型
我知道这个问题已经有3年了,但是自从moq 4.13以来,可以指定It.IsAnyType
进行泛型类型匹配。