【发布时间】:2017-03-13 22:03:40
【问题描述】:
我有一个测试可以找到从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是什么类型,也不关心它是什么类型。
【问题讨论】:
-
请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请参阅How to Ask 页面以获得澄清此问题的帮助。
-
@Nkosi 准备好了,我添加了更多细节
-
这个示例方法还是让人迷惑
this.Convert<MyEntity, SomeClass>(x); -
接口
MyTools在“实际项目”中除了所讨论的泛型方法之外是否包含许多其他成员?因为如果使用 Moq 很难做到这一点,那么编写一个实现接口的虚拟类并注入它可能很容易,而不是使用 Moq。
标签: c# generics testing mocking