2014-10-03 131 views
0

我正在尝试Moq Solr的Query()函数。我可以得到的代码编译,但当它运行时,我得到的错误:Solr单元测试Moq Solr.Query()

Object of type 'SolrNet.SolrQuery' cannot be converted to type 'SolrNet.SolrQueryResults`1[SolrProject.Document'] 

以下是我如何模拟Query()函数。我不知道它为什么要转换。 SolrQuery是Query()函数的参数,而SolrQueryResults是返回类型。

Mock<ISolrOperations<Document>> solr = new Mock<ISolrOperations<Document>>(); 

solr.Setup(x => x.Query(It.IsAny<SolrQuery>())) 
       .Returns<SolrQueryResults<Document>>(s => 
       { 
        SolrQueryResults<Document> data = new SolrQueryResults<Document>(); 

        data.Add(new Document 
         { 
          Author = "Bob" 
         }); 

        return data; 
       }); 

回答

1

原因其实很简单。 Moq中的Returns<T>方法的泛型参数表示通过模拟方法而不是返回类型公开的参数类型。

下面的代码显示了你想要做什么。通用参数应该是SolrQuery,而不是SolrQueryResults<Document>

solr.Setup(x => x.Query(It.IsAny<SolrQuery>())) 
       .Returns<SolrQuery>(s => 
       { 
        SolrQueryResults<Document> data = new SolrQueryResults<Document>(); 

        data.Add(new Document 
         { 
          Author = "Bob" 
         }); 

        return data; 
       });