【发布时间】:2015-11-11 12:46:04
【问题描述】:
我正在测试我的类ElasticUtility,它需要ElasticClient 的实例才能正常工作,所以我模拟了此类并将其注入ElasticUtility 实例(utility)
private ElasticUtility utility;
private Mock<IElasticClient> elasticClientMock;
private string elasticSearchIndexName;
elasticClientMock = new Mock<IElasticClient>();
utility = new UhhElasticUtility(elasticClientMock.Object);
这是实际的测试代码:
[Test]
public void GetGetPvDataClientReturnNull()
{
// arrange
var groupId = "groupid";
var startTime = new DateTime(2015, 08, 17, 13, 30, 00);
var endTime = new DateTime(2015, 08, 17, 13, 40, 00);
// act
utility.GetPvData(groupId, startTime, endTime);
// assert
elasticClientMock.Verify(ec => ec.Search<SegmentRecord>(It.IsAny<Nest.ISearchRequest>()), Times.Once());
}
当 Moq 库在模拟的 ElastiClient 中调用 .Search() 方法时,我得到一个 Null 引用异常。
编辑:
ElasticUtility的构造函数:
protected ElasticUtility(IElasticClient elasticClient, string elasticIndexName)
{
this.ElasticClient = elasticClient;
this.ElasticIndexName = elasticIndexName;
}
编辑:GetPvData() 方法:
public IEnumerable<dynamic> GetPvData(string groupId, DateTime startTime, DateTime endTime)
{
var res = ElasticClient.Search<SegmentRecord>(s => s
.Index(ElasticIndexName)
.Filter(f =>
f.Term(t => t.HistoryId, groupId) &&
f.Range(i =>
i.OnField(a => a.DateTime).LowerOrEquals(startTime))).SortAscending(p => p.DateTime).Size(1)).Documents.ToList();
return res.ToArray();
}
【问题讨论】:
-
请添加
UhhElasticUtility的C'tor和GetPvData的实现 -
会不会是被保护了?
-
没有受保护的 C'tor 不是问题...但我询问了
UhhElasticUtilityC'tor 和GetPvData... -
这是 GetPvData() 实现
-
问题是
.Documents你没有设置期望,然后搜索返回null...
标签: c# unit-testing testing elasticsearch moq