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