CounterDroneBackend/test/unit/CounterDrone.Core.Tests/DatabaseManagerTests.cs
tian ad0eaf47da 完善模型属性:加 Model/Description 字段,TaskNumber→ScenarioNumber,Task→Info,Task→Scenario 方法名
- DroneProfile/DroneSpec: 加 Model、Description
- Scenario: 加 Description,TaskNumber→ScenarioNumber
- EquipmentDeployment/FireUnitSpec: 加 Description
- ScenarioConfig: Task→Info
- ScenarioService: CreateTask→CreateScenario 等方法名统一
- 238 单元测试通过
2026-06-18 15:15:41 +08:00

90 lines
2.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.IO;
using CounterDrone.Core;
using CounterDrone.Core.Models;
using CounterDrone.Core.Repository;
using Xunit;
namespace CounterDrone.Core.Tests
{
public class DatabaseManagerTests : IDisposable
{
private readonly string _testDir;
private readonly IPathProvider _paths;
private readonly DatabaseManager _dbManager;
public DatabaseManagerTests()
{
_testDir = Path.Combine(Path.GetTempPath(), $"cd_test_{Guid.NewGuid():N}");
_paths = new TestPathProvider(_testDir);
_dbManager = new DatabaseManager(_paths);
}
public void Dispose()
{
if (Directory.Exists(_testDir))
Directory.Delete(_testDir, true);
}
[Fact]
public void OpenMainDb_CreatesAllTables()
{
var db = _dbManager.OpenMainDb();
// 验证所有 12 张表存在(含 Meta
var tables = new[]
{
"ModelInfo", "AmmunitionSpec", "Scenario", "CombatScene",
"ControlZone", "DroneProfile", "EquipmentDeployment",
"CloudDispersal", "RoutePlan", "Waypoint",
"SimulationReport"
};
foreach (var table in tables)
{
var count = db.ExecuteScalar<int>(
$"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='{table}'");
Assert.Equal(1, count);
}
db.Close();
}
[Fact]
public void OpenFrameDb_CreatesFrameRecordTable()
{
var db = _dbManager.OpenFrameDb("scenario_001");
var count = db.ExecuteScalar<int>(
"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='SimFrameRecord'");
Assert.Equal(1, count);
db.Close();
}
[Fact]
public void DeleteFrameDb_RemovesFile()
{
var scenarioId = "scenario_del";
var db = _dbManager.OpenFrameDb(scenarioId);
db.Close();
_dbManager.DeleteFrameDb(scenarioId);
var dbPath = Path.Combine(_paths.GetFramesDir(), $"{scenarioId}.db");
Assert.False(File.Exists(dbPath));
}
[Fact]
public void OpenMainDb_IsIdempotent()
{
var db1 = _dbManager.OpenMainDb();
db1.Close();
// 第二次打开不抛异常
var db2 = _dbManager.OpenMainDb();
db2.Close();
}
}
}