新增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