用途
metar-testing 是 afonsoft/metar-decoder 项目中的测试指南技能,面向 METAR 和 TAF 解码器的测试工作。它用于在编写测试、提高测试覆盖率、调试测试失败或验证解码器行为时提供统一的做法与命令参考。
主要能力
该技能描述了项目的测试技术栈与现状:使用 NUnit 作为测试框架,使用 coverlet 进行覆盖率统计;当前共有 421 个测试,覆盖率约 98%。测试按 ChunkDecoder 和实体(Entity)进行组织。
测试目录结构如下:
tests/ ├── Metar.Decoder.Tests/ │ ├── ChunkDecoder/ # 每个 decoder 一个文件 │ └── Entity/ # 实体测试 └── Taf.Decoder.Tests/ ├── ChunkDecoder/ └── Entity/
使用方式
技能给出的测试模式包括:使用 NUnit 的 [Test]、[TestCase]、[TestCaseSource];使用真实的 METAR/TAF 数据进行测试;覆盖严格模式与非严格模式;测试边界情况,如 CAVOK、NIL、RTD、负值;测试日期翻转(月末)。
常用命令如下:
全部测试
dotnet test MetarDecoder.sln --configuration Release
带覆盖率
dotnet test MetarDecoder.sln --collect:"XPlat Code Coverage"
仅 METAR
dotnet test tests/Metar.Decoder.Tests/ --configuration Release
仅 TAF
dotnet test tests/Taf.Decoder.Tests/ --configuration Release
指定测试
dotnet test --filter "FullyQualifiedName~IcaoChunkDecoderTest"
示例测试代码:
[Test] public void TestParseICAO() { var decoder = new MetarDecoder(); var metar = decoder.Parse("METAR KJFK 121755Z 31008KT 10SM FEW250 M04/M19 A3036"); Assert.That(metar.ICAO, Is.EqualTo("KJFK")); }
[TestCase("METAR KJFK 121755Z 31008KT 10SM FEW250 M04/M19 A3036")] [TestCase("METAR EGLL 121750Z 27009KT 9999 FEW040 07/01 Q1024")] public void TestParseMultipleStations(string raw) { var decoder = new MetarDecoder(); var metar = decoder.Parse(raw); Assert.That(metar.ICAO, Is.Not.Null); Assert.That(metar.ICAO.Length, Is.EqualTo(4)); }
适用场景
适用于为 METAR/TAF 解码器新增或维护测试、提升覆盖率、排查测试失败,以及验证解码器在各类气象报文下的解析行为。
限制
技能明确列出以下约束:不得修改既有测试以强行通过;覆盖率不得低于约 98% 的基线;net48 测试无法在 Linux 上运行;不要提交 TestResults/ 目录。