NavisworksTransport/UnitTests/Integration/SectionBoxExportAutomationTests.cs
tian ac454196f1 feat: 集成测试补 T16 剖面盒导出(25/25 通过)
- 服务端新增 export-section-box 端点:mode=bbox(指定包围盒,测试可控)/ mode=activeView(UI 剖面盒)
- 新增 SectionBoxExportAutomationTests:导出 NWD 文件存在/对象数/文件大小/隐藏节点断言
- 客户端 ExportSectionBoxAsync 方法
2026-08-04 18:44:01 +08:00

84 lines
3.2 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 System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json.Linq;
namespace NavisworksTransport.UnitTests.Integration
{
/// <summary>
/// 剖面盒导出集成测试(覆盖计划 T16
///
/// 验证 SectionBoxExporter 的指定包围盒导出链路:
/// - 导出 NWD 文件成功(文件存在且非空)
/// - 包围盒内对象数 > 0、文件大小 > 0
/// - 隐藏节点计算完成hiddenNodeCount >= 0
///
/// 使用指定包围盒模式bbox不依赖 UI 剖面盒状态;包围盒覆盖模型 Hoisting/Rail 区域。
/// </summary>
[TestClass]
[TestCategory("NavisworksIntegration")]
public class SectionBoxExportAutomationTests
{
// 模型单位:覆盖 Hoisting/Rail 区域的包围盒(已验证含 57 个对象)
private const double MinX = -240, MinY = 10, MinZ = -20;
private const double MaxX = -170, MaxY = 30, MaxZ = 25;
[TestMethod]
[Timeout(240000)]
public async Task SectionBoxBBoxExport_ProducesValidNwd()
{
using (var client = new NavisworksTestAutomationClient())
{
await client.EnsureServiceReadyAsync(TimeSpan.FromSeconds(90)).ConfigureAwait(false);
string tempDir = Path.Combine(Path.GetTempPath(), "NavisworksTransportIntegrationTests", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(tempDir);
try
{
string exportPath = Path.Combine(tempDir, "sectionbox-export.nwd");
JObject response = await client.ExportSectionBoxAsync(
exportPath,
MinX, MinY, MinZ, MaxX, MaxY, MaxZ).ConfigureAwait(false);
Assert.IsTrue(response.Value<bool>("ok"), "剖面盒导出失败: " + (string)response["error"]);
JObject data = (JObject)response["data"];
// 文件已生成且非空
Assert.IsFalse(string.IsNullOrWhiteSpace((string)data["filePath"]), "导出文件路径为空");
Assert.IsTrue(File.Exists(exportPath), "导出文件不存在: " + exportPath);
Assert.IsTrue((long)data["fileSize"] > 0, "导出文件大小应大于 0");
Assert.IsTrue(new FileInfo(exportPath).Length > 0, "导出文件实际为空");
// 包围盒内对象与隐藏节点
Assert.IsTrue((int)data["objectCount"] > 0, "包围盒内应找到对象");
Assert.IsTrue((int)data["hiddenNodeCount"] >= 0, "隐藏节点数不能为负");
Assert.AreEqual("bbox", (string)data["mode"], "导出模式应为 bbox");
}
finally
{
SafeDelete(tempDir);
}
}
}
private static void SafeDelete(string directory)
{
if (!Directory.Exists(directory))
{
return;
}
try
{
Directory.Delete(directory, true);
}
catch
{
}
}
}
}