using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Milvus.Client;
namespace MilvusDemo
{
///
/// 用于测试MilvusService的模拟类
///
public class MilvusServiceTests
{
// 模拟的MilvusService实例
private readonly MilvusService _milvusService;
// 标记各个方法是否被调用
public bool InitializeCollectionCalled { get; private set; }
public bool CreateIndexAndLoadCalled { get; private set; }
public bool InsertRandomDataCalled { get; private set; }
public bool SearchVectorCalled { get; private set; }
// 记录传入的参数
public int InsertDataCount { get; private set; }
public int SearchTopK { get; private set; }
public MilvusServiceTests()
{
// 创建真实的MilvusService实例,但我们将拦截其方法调用
_milvusService = new MilvusService("localhost", 19530, "test_collection", 8);
}
///
/// 模拟初始化集合的方法
///
public async Task MockInitializeCollectionAsync()
{
InitializeCollectionCalled = true;
Console.WriteLine("[TEST] InitializeCollectionAsync called");
// 模拟操作延迟
await Task.Delay(100);
Console.WriteLine("[TEST] Collection dropped and created");
}
///
/// 模拟创建索引并加载集合的方法
///
public async Task MockCreateIndexAndLoadAsync()
{
CreateIndexAndLoadCalled = true;
Console.WriteLine("[TEST] CreateIndexAndLoadAsync called");
// 模拟操作延迟
await Task.Delay(100);
Console.WriteLine("[TEST] Index created");
Console.WriteLine("[TEST] Collection loaded");
}
///
/// 模拟插入随机数据的方法
///
public async Task MockInsertRandomDataAsync(int count)
{
InsertRandomDataCalled = true;
InsertDataCount = count;
Console.WriteLine($"[TEST] InsertRandomDataAsync called with count: {count}");
// 模拟操作延迟
await Task.Delay(100);
Console.WriteLine("[TEST] Data inserted");
}
///
/// 模拟向量搜索的方法
///
public async Task MockSearchVectorAsync(int topK = 5)
{
SearchVectorCalled = true;
SearchTopK = topK;
Console.WriteLine($"[TEST] SearchVectorAsync called with topK: {topK}");
// 模拟操作延迟
await Task.Delay(100);
// 创建模拟的搜索结果
var mockIds = new List();
for (int i = 0; i < topK; i++)
{
mockIds.Add(1000 + i); // 使用1000+i作为模拟ID
}
Console.WriteLine("[TEST] Search completed");
// 注意:这里我们无法直接创建SearchResults实例,因为它可能是内部类
// 在实际测试中,您可能需要使用模拟框架如Moq来模拟这个返回值
// 这里我们返回null,实际使用时需要处理这种情况
return null;
}
///
/// 运行完整的测试流程
///
public async Task RunFullTestAsync()
{
Console.WriteLine("=== Starting MilvusService Test ===");
await MockInitializeCollectionAsync();
await MockCreateIndexAndLoadAsync();
await MockInsertRandomDataAsync(1000);
await MockSearchVectorAsync(5);
// 打印测试结果摘要
Console.WriteLine("\n=== Test Summary ===");
Console.WriteLine($"InitializeCollection Called: {InitializeCollectionCalled}");
Console.WriteLine($"CreateIndexAndLoad Called: {CreateIndexAndLoadCalled}");
Console.WriteLine($"InsertRandomData Called: {InsertRandomDataCalled} (Count: {InsertDataCount})");
Console.WriteLine($"SearchVector Called: {SearchVectorCalled} (TopK: {SearchTopK})");
Console.WriteLine("=== Test Completed ===");
}
}
}