using YZWater.Core.Services; namespace YZWater.Core.Tests.Services; /// /// 路径锚定测试:数据/配置/日志必须落在程序目录下,而不是当前工作目录 /// (当前工作目录随启动方式变化,会让程序读不到自己的数据) /// public class AppPathsTests { [Theory] [InlineData(nameof(AppPaths.Database))] [InlineData(nameof(AppPaths.Config))] [InlineData(nameof(AppPaths.ConfigLastGood))] [InlineData(nameof(AppPaths.Projects))] [InlineData(nameof(AppPaths.Backups))] [InlineData(nameof(AppPaths.Logs))] public void Path_IsAnchoredToExecutableDirectory(string name) { var value = name switch { nameof(AppPaths.Database) => AppPaths.Database, nameof(AppPaths.Config) => AppPaths.Config, nameof(AppPaths.ConfigLastGood) => AppPaths.ConfigLastGood, nameof(AppPaths.Projects) => AppPaths.Projects, nameof(AppPaths.Backups) => AppPaths.Backups, nameof(AppPaths.Logs) => AppPaths.Logs, _ => throw new ArgumentOutOfRangeException(nameof(name)) }; Assert.True(Path.IsPathRooted(value), $"{name} 必须是绝对路径"); Assert.StartsWith(Path.GetFullPath(AppContext.BaseDirectory), Path.GetFullPath(value)); } [Fact] public void Database_And_Config_UseExpectedFileNames() { Assert.Equal("yzwater.db", Path.GetFileName(AppPaths.Database)); Assert.Equal("yzwater-config.json", Path.GetFileName(AppPaths.Config)); // 备份副本必须与主配置同名加后缀:FileSystemWatcher 只监听主配置文件名 Assert.Equal("yzwater-config.json.lastgood", Path.GetFileName(AppPaths.ConfigLastGood)); } }