新增CncCollector.Tests单元测试项目(58个测试全部通过)
parent
6fd1d616ac
commit
bfb9c5a014
@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net472</TargetFramework>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<RootNamespace>CncCollector.Tests</RootNamespace>
|
||||||
|
<AssemblyName>CncCollector.Tests</AssemblyName>
|
||||||
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
|
<GenerateDocumentationFile>false</GenerateDocumentationFile>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net472" Version="1.0.3" PrivateAssets="all" />
|
||||||
|
<PackageReference Include="xunit" Version="2.8.1" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.1" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||||
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\CncModels\CncModels.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\CncCollector\CncCollector.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@ -0,0 +1,101 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Xunit;
|
||||||
|
using CncCollector.Core;
|
||||||
|
using CncCollector.Config;
|
||||||
|
|
||||||
|
namespace CncCollector.Tests
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 测试 CncCollector.Core.CollectorEngine 类的基础行为。
|
||||||
|
/// 由于直接连接数据库,测试时使用无效连接字符串以触发错误处理路径
|
||||||
|
/// </summary>
|
||||||
|
public class CollectorEngineTests
|
||||||
|
{
|
||||||
|
private CollectorConfig CreateInvalidConfig()
|
||||||
|
{
|
||||||
|
return new CollectorConfig
|
||||||
|
{
|
||||||
|
BusinessConnection = "Server=invalid;Database=invalid;User Id=invalid;Password=invalid;",
|
||||||
|
LogConnection = "Server=invalid;Database=invalid;User Id=invalid;Password=invalid;",
|
||||||
|
ApiPort = 5800
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void 构造函数_正常创建()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
Assert.False(engine.IsRunning);
|
||||||
|
Assert.Equal(0, engine.WorkerCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void IsRunning_初始值_false()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
Assert.False(engine.IsRunning);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void GetStatus_未启动_返回停止状态()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
var status = engine.GetStatus();
|
||||||
|
Assert.NotNull(status);
|
||||||
|
Assert.True(status.ContainsKey("isRunning"));
|
||||||
|
Assert.True(status.ContainsKey("startTime"));
|
||||||
|
Assert.True(status.ContainsKey("uptimeSeconds"));
|
||||||
|
Assert.True(status.ContainsKey("workerCount"));
|
||||||
|
Assert.True(status.ContainsKey("workers"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Start_无DB连接_不崩溃()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
// 应该不会抛出异常,即使数据库连接失败
|
||||||
|
engine.Start();
|
||||||
|
|
||||||
|
// 启动后应该进入运行态(实现可能会因为加载地址失败而没有工作地址,但不会崩溃)
|
||||||
|
Assert.True(engine.IsRunning);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Stop_未启动_不崩溃()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
// 未启动调用 Stop 不应抛出异常
|
||||||
|
engine.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Refresh_未启动_不崩溃()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
// 未启动时刷新应当不抛出异常
|
||||||
|
engine.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void UptimeSeconds_未启动_返回0()
|
||||||
|
{
|
||||||
|
var config = CreateInvalidConfig();
|
||||||
|
var engine = new CollectorEngine(config);
|
||||||
|
|
||||||
|
Assert.Equal(0, engine.UptimeSeconds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
using System;
|
||||||
|
using Xunit;
|
||||||
|
using CncCollector.Core;
|
||||||
|
using CncCollector.Config;
|
||||||
|
|
||||||
|
namespace CncCollector.Tests
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 日终汇总作业测试(使用无效数据库连接字符串以触发容错处理)
|
||||||
|
/// </summary>
|
||||||
|
public class DailySummaryJobTests
|
||||||
|
{
|
||||||
|
private string InvalidConnection => "Server=invalid;Database=invalid;User Id=invalid;Password=invalid;";
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Execute_无DB连接_不抛异常()
|
||||||
|
{
|
||||||
|
var job = new DailySummaryJob(InvalidConnection);
|
||||||
|
var date = DateTime.Now.AddDays(-1).Date;
|
||||||
|
|
||||||
|
// 仅确保调用不抛出异常
|
||||||
|
job.Execute(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Execute_正常日期_不抛异常()
|
||||||
|
{
|
||||||
|
var job = new DailySummaryJob(InvalidConnection);
|
||||||
|
var date = DateTime.Now.AddDays(-1);
|
||||||
|
|
||||||
|
job.Execute(date.Date);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Execute_多次调用同一日期_不抛异常()
|
||||||
|
{
|
||||||
|
var job = new DailySummaryJob(InvalidConnection);
|
||||||
|
var date = DateTime.Now.AddDays(-1).Date;
|
||||||
|
|
||||||
|
// 幂等性测试:多次执行同一日期不应抛出异常
|
||||||
|
job.Execute(date);
|
||||||
|
job.Execute(date);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue