AppPathsTests.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using YZWater.Core.Services;
  2. namespace YZWater.Core.Tests.Services;
  3. /// <summary>
  4. /// 路径锚定测试:数据/配置/日志必须落在程序目录下,而不是当前工作目录
  5. /// (当前工作目录随启动方式变化,会让程序读不到自己的数据)
  6. /// </summary>
  7. public class AppPathsTests
  8. {
  9. [Theory]
  10. [InlineData(nameof(AppPaths.Database))]
  11. [InlineData(nameof(AppPaths.Config))]
  12. [InlineData(nameof(AppPaths.ConfigLastGood))]
  13. [InlineData(nameof(AppPaths.Projects))]
  14. [InlineData(nameof(AppPaths.Backups))]
  15. [InlineData(nameof(AppPaths.Logs))]
  16. public void Path_IsAnchoredToExecutableDirectory(string name)
  17. {
  18. var value = name switch
  19. {
  20. nameof(AppPaths.Database) => AppPaths.Database,
  21. nameof(AppPaths.Config) => AppPaths.Config,
  22. nameof(AppPaths.ConfigLastGood) => AppPaths.ConfigLastGood,
  23. nameof(AppPaths.Projects) => AppPaths.Projects,
  24. nameof(AppPaths.Backups) => AppPaths.Backups,
  25. nameof(AppPaths.Logs) => AppPaths.Logs,
  26. _ => throw new ArgumentOutOfRangeException(nameof(name))
  27. };
  28. Assert.True(Path.IsPathRooted(value), $"{name} 必须是绝对路径");
  29. Assert.StartsWith(Path.GetFullPath(AppContext.BaseDirectory), Path.GetFullPath(value));
  30. }
  31. [Fact]
  32. public void Database_And_Config_UseExpectedFileNames()
  33. {
  34. Assert.Equal("yzwater.db", Path.GetFileName(AppPaths.Database));
  35. Assert.Equal("yzwater-config.json", Path.GetFileName(AppPaths.Config));
  36. // 备份副本必须与主配置同名加后缀:FileSystemWatcher 只监听主配置文件名
  37. Assert.Equal("yzwater-config.json.lastgood", Path.GetFileName(AppPaths.ConfigLastGood));
  38. }
  39. }