Модульные тесты
Этот каталог содержит детерминированные тесты движка, встроенные в генерируемое тестовое приложение. Полная актуальная карта тестов, маршрутизация проверок и сведения о целях покрытия приведены в разделе Тестирование.
Фреймворк и цель
- Фреймворк: Catch2 (
catch_amalgamated.hpp) - Точка входа тестового приложения:
Source/Applications/TestingApp.cpp - Владелец списка исходных файлов тестов:
BuildTools/cmake/stages/EngineSources.cmake(FO_TESTS_SOURCE) - Формат имени генерируемого исполняемого файла:
<ProjectDevName>_UnitTests - Генерируемая цель запуска:
RunUnitTests - Формат имени генерируемой цели покрытия:
<ProjectDevName>_CodeCoverage, а такжеRunCodeCoverage,GenerateCodeCoverageReportиAnalyzeCodeCoverage, когда покрытие включено
Имя исполняемой цели использует префикс имени проекта для разработки (<ProjectDevName>_UnitTests); RunUnitTests является генерируемой целью запуска. Считайте префикс частью генерации проекта, а не универсальным API движка.
Текущие наборы тестов
Полный список имён файлов и их количество, полученные из исходного кода, генерируются в source-inventory.json. В разделе Тестирование приведены актуальные группы владения и маршрутизация проверок.
После добавления, удаления или переименования файла Test_*.cpp перегенерируйте инвентарь из корня движка:
python BuildTools/docs_inventory.py --write
python BuildTools/docs_inventory.py --check
Конфигурация, источники данных, файлы и кеши
Source/Tests/Test_CacheStorage.cppSource/Tests/Test_ConfigFile.cppSource/Tests/Test_DataSource.cppSource/Tests/Test_FileSystem.cppSource/Tests/Test_Settings.cpp
Базовая платформа, контейнеры и утилиты
Source/Tests/Test_BaseLogging.cppSource/Tests/Test_BasicCore.cppSource/Tests/Test_CommonHelpers.cppSource/Tests/Test_Compressor.cppSource/Tests/Test_Containers.cppSource/Tests/Test_Cryptography.cppSource/Tests/Test_DequeObject.cppSource/Tests/Test_DataSerialization.cppSource/Tests/Test_DiskFileSystem.cppSource/Tests/Test_ExceptionHandling.cppSource/Tests/Test_ExtendedTypes.cppSource/Tests/Test_FunctionObjects.cppSource/Tests/Test_GenericUtils.cppSource/Tests/Test_GlobalData.cppSource/Tests/Test_HashedString.cppSource/Tests/Test_Logging.cppSource/Tests/Test_MemorySystem.cpp(политика OOM/commit failure и opt-in заполнение heap потока-владельца, повторно используемые slots и суммы size classes без очистки caches)Source/Tests/Test_Platform.cppSource/Tests/Test_RandomGenerator.cppSource/Tests/Test_SafeArithmetics.cppSource/Tests/Test_SettingsStorage.cppSource/Tests/Test_SmartPointers.cppSource/Tests/Test_StackTrace.cppSource/Tests/Test_StringObject.cppSource/Tests/Test_StringUtils.cppSource/Tests/Test_StrongType.cppSource/Tests/Test_TimeRelated.cppSource/Tests/Test_Threading.cppSource/Tests/Test_WorkerPool.cppSource/Tests/Test_WorkThread.cpp
Общая модель среды выполнения
Source/Tests/Test_AnyData.cppSource/Tests/Test_ApplicationHeadless.cppSource/Tests/Test_ClientEntityLifetime.cppSource/Tests/Test_Common.cppSource/Tests/Test_EngineMetadata.cppSource/Tests/Test_EntityLifecycle.cppSource/Tests/Test_EntityProtos.cppSource/Tests/Test_Geometry.cppSource/Tests/Test_LineTracer.cppSource/Tests/Test_MapLoader.cppSource/Tests/Test_MapSprite.cppSource/Tests/Test_MapViewHitTesting.cpp(самодостаточный выбор стены/пола, обычная и opt-in политика «яйца»; оба скриптовых backend)Source/Tests/Test_Movement.cppSource/Tests/Test_PathFinding.cppSource/Tests/Test_Properties.cppSource/Tests/Test_ProtoManager.cppSource/Tests/Test_TextPack.cppSource/Tests/Test_Timer.cppSource/Tests/Test_TransparentEgg.cppSource/Tests/Test_TwoDimensionalGrid.cpp
Сеть и интеграция сервера с клиентом
Source/Tests/Test_ClientDataValidation.cppSource/Tests/Test_ClientEngine.cppSource/Tests/Test_ClientRuntimeApi.cppSource/Tests/Test_ClientServerIntegration.cppSource/Tests/Test_ClientUpdater.cppSource/Tests/Test_DataBase.cppSource/Tests/Test_EntitySync.cppSource/Tests/Test_FogOfWar.cppSource/Tests/Test_LocationAndEntityMgmt.cppSource/Tests/Test_ModelAnimation.cppSource/Tests/Test_NetBuffer.cppSource/Tests/Test_NetSockets.cppSource/Tests/Test_NoiseProtocol.cppSource/Tests/Test_NetworkClient.cppSource/Tests/Test_NetworkServer.cppSource/Tests/Test_NetworkUdp.cppSource/Tests/Test_ServerAdvancedOps.cppSource/Tests/Test_ServerEngine.cppSource/Tests/Test_ServerEntityLoading.cppSource/Tests/Test_ServerEntityLifetime.cppSource/Tests/Test_ServerEventContracts.cppSource/Tests/Test_ServerItems.cppSource/Tests/Test_ServerMapOperations.cppSource/Tests/Test_ServerMoveReconciliation.cppSource/Tests/Test_SecureChannel.cppSource/Tests/Test_UpdaterBackend.cpp
Скрипты и доступные из скриптов API
Source/Tests/Test_AngelScriptAlignment.cppSource/Tests/Test_AngelScriptAttributes.cppSource/Tests/Test_AngelScriptBytecode.cppSource/Tests/Test_AngelScriptCall.cppSource/Tests/Test_CommonScriptMethods.cppSource/Tests/Test_ScriptBuiltins.cppSource/Tests/Test_ScriptEntityOps.cppSource/Tests/Test_ServerScriptMethods.cpp
Baker и инструменты
Source/Tests/Test_AngelScriptBaker.cppSource/Tests/Test_AudioBaker.cppSource/Tests/Test_BakerSetup.cppSource/Tests/Test_ConfigBaker.cppSource/Tests/Test_EffectBaker.cppSource/Tests/Test_ImageBaker.cppSource/Tests/Test_ImageWriter.cppSource/Tests/Test_MapBaker.cppSource/Tests/Test_Mapper.cppSource/Tests/Test_MetadataBaker.cppSource/Tests/Test_ManagedScriptBaker.cppSource/Tests/Test_ModelBaker.cppSource/Tests/Test_ModelBounds.cppSource/Tests/Test_ParticleBaker.cppSource/Tests/Test_ModelMeshData.cppSource/Tests/Test_ModelAnimationData.cppSource/Tests/Test_ModelAnimationConverter.cppSource/Tests/Test_ModelAnimationPoseProcedural.cppSource/Tests/Test_ModelAnimationRuntime.cppSource/Tests/Test_ModelSkeletonCompatibility.cppSource/Tests/Test_ModelSourceLoader.cppSource/Tests/Test_OzzAnimation.cppSource/Tests/Test_ProtoBaker.cppSource/Tests/Test_ProtoTextBaker.cppSource/Tests/Test_RawCopyBaker.cppSource/Tests/Test_ResourceIndex.cppSource/Tests/Test_ResourcePack.cppSource/Tests/Test_TextBaker.cppSource/Tests/Test_TextureAtlas.cpp
Покрытие конвейера моделей намеренно разделено. Test_ModelMeshData.cpp
владеет wire-контрактом только для mesh; Test_ModelSourceLoader.cpp и
Test_ModelAnimationConverter.cpp владеют извлечением исходных данных и
каноническим преобразованием; Test_ModelAnimationData.cpp владеет
версионированным архивом rig; Test_ModelBaker.cpp пересекает основанный на
исходных данных baking и разрешение привязок; наборы animation, runtime-pose,
procedural, skeleton-compatibility и Ozz покрывают производственный путь
семплирования и матриц. Поддерживайте эти границы независимо зелёными, затем
используйте Test_ClientEngine.cpp для границы между baker и парсером клиента.
Тесты рендеринга и frontend
Source/Tests/Test_AudioManager.cppSource/Tests/Test_EffekseerParticleRuntime.cpp- прогоняет подготовленные legacy- и modern-эффекты Effekseer через реальные callbacks Sprite/Ring нативной среды выполнения и проверяет детерминированную топологию нескольких экземпляров, геометрию FOnline, UV атласа, все три режима Z-sort, разбиение Ring по бюджету индексов и повторное применение масштаба на уровне facade без respawn или сброса времени.Source/Tests/Test_ImGui.cppSource/Tests/Test_ModelSpriteLayout.cppSource/Tests/Test_ParticleBaker.cpp- покрывает обнаружение исходных.efkproj, сопоставление выходных ключей.spark/.efkproj, проверку генерируемых бинарных данных, отклонение авторских.spk/.efkна входе среды выполнения и изоляцию seeded-stream SPARK между чередующимися эффектами и независимыми контекстами движка. Путь сборки и интеграционного baking применяет нативный экспортер с фиксированным профилем к реальным XML-проектам.Source/Tests/Test_Rendering.cpp
CI-задача документации отклоняет устаревший сгенерированный инвентарь. Заголовки выше отражают текущие исходные файлы для навигации, но не заменяют полный сгенерированный список.
Запуск тестов
Предпочтительно запускайте генерируемую цель из настроенного каталога сборки:
cmake --build . --config RelWithDebInfo --target RunUnitTests
Запускайте исполняемую цель напрямую, когда требуются аргументы Catch2. Генерируемые тестовые файлы обычно размещаются в Binaries/Tests-*, например:
- Windows:
Binaries/Tests-Windows-win64/<ProjectDevName>_UnitTests.exe - Linux:
Binaries/Tests-Linux-x64/<ProjectDevName>_UnitTests
Запуск покрытия кода
Сборки с покрытием используют путь FO_CODE_COVERAGE, описанный в разделе Тестирование. Генерируются следующие цели:
RunCodeCoverageGenerateCodeCoverageReportAnalyzeCodeCoverage
Отчёты о покрытии создаются в CodeCoverage/<Toolchain>/<Platform-Config>/,
а Source/Tests/ исключается из знаменателя покрытия исходного кода.
Общие вспомогательные средства тестов
Заголовочные вспомогательные средства находятся рядом с наборами тестов и не входят в FO_TESTS_SOURCE:
Source/Tests/Test_BakerHelpers.hсодержит fixtures запечённых ресурсов (спрайтов, прототипов и metadata) иTestRig, который запускает настоящие bakers поверх источников в памяти.Source/Tests/Test_ParticleFixtures.hсодержит fixtures ресурсов частиц.Source/Tests/Test_ImGuiHarness.hнажимает виджеты ImGui по label, чтобы ветвь за кнопкой, checkbox, selectable или свёрнутой секцией выполнялась в headless-кадре. Контракт закреплён тестомImGuiTestHarnessPressesWidgetsByLabelвTest_ImGui.cpp; правила использования приведены в разделе Тестирование.Source/Tests/Test_DumpArtifacts.hзапоминает каталогиTexDump_*, существующие в рабочем каталоге, чтобы набор, запускающий выгрузку atlas, удалял только артефакты, созданные собственным запуском.
Примечания
- Сохраняйте тесты детерминированными и стабильными на всех платформах.
- Избегайте зависимости модульных тестов от сети, файловой системы и времени, если такая зависимость не замокана или не изолирована.
- Новые исходные файлы тестов необходимо добавлять в
FO_TESTS_SOURCEвBuildTools/cmake/stages/EngineSources.cmake. - При добавлении, удалении или перегруппировке наборов обновляйте раздел Тестирование и этот README.
- Считайте
RunUnitTestsминимальной широкой проверкой изменений движка после прохождения сфокусированных тестов.