using System; using Xunit; using CncCollector.Config; namespace CncCollector.Tests { /// /// ConfigLoader 静态类测试(数据库连接部分通过异常处理实现,不抛出异常) /// public class ConfigLoaderTests { [Fact(DisplayName = "LoadRuntimeConfig_无效连接字符串_不抛异常")] public void LoadRuntimeConfig_无效连接字符串_不抛异常() { var cfg = new CollectorConfig(); // 使用无效连接串,理论上应被内部 catch 捕获,不抛异常 ConfigLoader.LoadRuntimeConfig("Server=invalid;Database=nosuchdb;User Id=x;Password=y;", cfg); } [Fact(DisplayName = "LoadRuntimeConfig_Null配置对象_不抛异常")] public void LoadRuntimeConfig_Null配置对象_不抛异常() { // 第二个参数为 null,方法内部需要处理空对象场景(不会抛出异常) ConfigLoader.LoadRuntimeConfig("Server=invalid;Database=nosuchdb;User Id=x;Password=y;", null); } [Fact(DisplayName = "LoadRuntimeConfig_默认配置对象_属性值不变")] public void LoadRuntimeConfig_默认配置对象_属性值不变() { var cfg = new CollectorConfig(); ConfigLoader.LoadRuntimeConfig("Server=invalid;Database=nosuchdb;User Id=x;Password=y;", cfg); // 连接失败时应保持默认值 Assert.Equal(5800, cfg.ApiPort); Assert.Equal("collector_api_key_2026", cfg.ApiKey); Assert.Equal(10, cfg.HeartbeatIntervalSeconds); Assert.Equal(30, cfg.ConfigPollIntervalSeconds); Assert.Equal("01:00", cfg.DailySummaryTime); Assert.Equal("CncCollector", cfg.ServiceId); Assert.Equal(3, cfg.CollectRetryCount); Assert.Equal(30, cfg.CollectRetryIntervalSeconds); Assert.Equal(5, cfg.CollectFailAlertThreshold); } [Fact(DisplayName = "LoadRuntimeConfig_各配置项映射正确")] public void LoadRuntimeConfig_各配置项映射正确() { // 设定一个初始对象的自定义值,模拟数据库连接失败时保持这些初始值 var cfg = new CollectorConfig { ApiPort = 12345, ApiKey = "custom_key", HeartbeatIntervalSeconds = 99, ConfigPollIntervalSeconds = 77, DailySummaryTime = "04:44", ServiceId = "CustomSvc", CollectRetryCount = 7, CollectRetryIntervalSeconds = 11, CollectFailAlertThreshold = 9 }; ConfigLoader.LoadRuntimeConfig("Server=invalid;Database=nosuchdb;User Id=x;Password=y;", cfg); // 由于数据库连接失败,全部属性应保持初始值 Assert.Equal(12345, cfg.ApiPort); Assert.Equal("custom_key", cfg.ApiKey); Assert.Equal(99, cfg.HeartbeatIntervalSeconds); Assert.Equal(77, cfg.ConfigPollIntervalSeconds); Assert.Equal("04:44", cfg.DailySummaryTime); Assert.Equal("CustomSvc", cfg.ServiceId); Assert.Equal(7, cfg.CollectRetryCount); Assert.Equal(11, cfg.CollectRetryIntervalSeconds); Assert.Equal(9, cfg.CollectFailAlertThreshold); } } }