模拟一个类方法

时间:2014-06-20 09:46:10

标签: c# unit-testing mocking moq

我有一个接口 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做了错误的模拟?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

看起来您的问题是第三个参数未正确匹配,因此您设置的模拟未被使用。

在您的设置中,而不是使用new StringDataContractSerializer()尝试It.IsAny<StringDataContractSerializer>()