我有一个接口 IKeyValueStore ,我想模拟这个类并设置它的一个方法来返回一些虚拟数据。我试过这种方式
var storemock = new Mock<IKeyValueStore>();
storemock.Setup(m => m.Restore<List<IProductDescription>>(It.IsAny<string>(),null,new StringDataContractSerializer())).Returns(ListOfProductDescriptions);
private List<IProductDescription> ListOfProductDescriptions()
{
var obj1 = new ProductDescription("id1");
var lst = new List<IProductDescription>();
lst.Add(obj1);
return lst;
}
我将这个storemock对象传递给我的一个测试类构造函数。说 TestClass
var objtestclass = new TestClass(storemock.Object);
和i调用方法调用恢复方法。
objtestclass.checkstore();
在构造函数中我设置 IkeyValueStore 类型 _store 私有字段。所以我的testclass构造函数是: -
public TestClass(IkeyValueStore store)
{
_store = store;
}
我的测试方法(恢复)是: -
Public async Task<IEnumerable<IProductDescription>> checkscore()
{
// here products is coming null.
Products = _store.Restore<List<IProductDescription>>(CachedProductsKey, null, new StringDataContractSerializer());
}
问题: - 在checkstore方法中,产品应该有一个产品描述列表但是为空。我是否对IkeyValueStore做了错误的模拟?任何帮助表示赞赏。
答案 0 :(得分:2)
看起来您的问题是第三个参数未正确匹配,因此您设置的模拟未被使用。
在您的设置中,而不是使用new StringDataContractSerializer()
尝试It.IsAny<StringDataContractSerializer>()