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 ==="); } } }