using System; using System.Collections.Generic; using Xunit; using CncCollector.Core; using CncModels.Entity; namespace CncCollector.Tests { /// /// CollectRecordWriter 单元测试。 /// CollectRecordWriter 使用静态方法 + MySqlConnection, /// 使用无效连接字符串验证容错行为(不抛异常)。 /// public class CollectRecordWriterTests { /// 无效连接字符串 private const string InvalidConnStr = "Server=invalid;Database=invalid;User Id=invalid;Password=invalid;"; // ===== WriteBatch 测试 ===== [Fact] public void WriteBatch_无效连接字符串_不抛异常() { // WriteBatch 内部所有DB操作都有 try-catch,不应向外抛异常 var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( InvalidConnStr, InvalidConnStr, null, "", 1, DateTime.Now, 100L, false, "测试错误")); Assert.Null(ex); } [Fact] public void WriteBatch_成功状态但记录为空_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( InvalidConnStr, InvalidConnStr, new List(), "{}", 1, DateTime.Now, 50L, true, null)); Assert.Null(ex); } [Fact] public void WriteBatch_成功状态有记录_不抛异常() { var records = new List { new CollectRecord { MachineId = 1, CollectTime = DateTime.Now, ProgramName = "O0001", PartCount = 10 } }; var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( InvalidConnStr, InvalidConnStr, records, "{}", 1, DateTime.Now, 200L, true, null)); Assert.Null(ex); } [Fact] public void WriteBatch_失败状态_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( InvalidConnStr, InvalidConnStr, null, "原始JSON", 1, DateTime.Now, null, false, "连接超时")); Assert.Null(ex); } [Fact] public void WriteBatch_null连接字符串_不抛异常() { // null连接字符串会在 MySqlConnection 构造时失败,但应被 try-catch 捕获 var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( null, null, null, "", 1, DateTime.Now, null, false, "错误")); Assert.Null(ex); } [Fact] public void WriteBatch_null原始JSON_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( InvalidConnStr, InvalidConnStr, null, null, 1, DateTime.Now, 100L, false, null)); Assert.Null(ex); } [Fact] public void WriteBatch_多条记录_不抛异常() { var records = new List { new CollectRecord { MachineId = 1, CollectTime = DateTime.Now, ProgramName = "O0001", PartCount = 5 }, new CollectRecord { MachineId = 2, CollectTime = DateTime.Now, ProgramName = "O0002", PartCount = 10 }, new CollectRecord { MachineId = 3, CollectTime = DateTime.Now, ProgramName = "O0003", PartCount = 15 } }; var ex = Record.Exception(() => CollectRecordWriter.WriteBatch( InvalidConnStr, InvalidConnStr, records, "[]", 1, DateTime.Now, 300L, true, null)); Assert.Null(ex); } // ===== RecordFailure 测试 ===== [Fact] public void RecordFailure_无效连接字符串_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.RecordFailure( InvalidConnStr, 1, "连接超时")); Assert.Null(ex); } [Fact] public void RecordFailure_null连接字符串_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.RecordFailure( null, 1, "错误")); Assert.Null(ex); } [Fact] public void RecordFailure_null错误信息_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.RecordFailure( InvalidConnStr, 1, null)); Assert.Null(ex); } [Fact] public void RecordFailure_无效地址ID_不抛异常() { var ex = Record.Exception(() => CollectRecordWriter.RecordFailure( InvalidConnStr, -1, "地址无效")); Assert.Null(ex); } } }