kb/testing
Тесты для инфры, не миф. Нативный `.tftest.hcl` (TF 1.6+) с `run` и `assert`, mock-провайдеры для unit-тестов без облака, Terratest для интеграционных сценариев на Go, terraform-compliance для BDD-policy. Что тестировать, что нет, и как не превратить test suite в самостоятельный проект.
Mock-провайдер заменяет реальный AWS на синтезированные ответы, тест бежит без облака, секунды вместо минут. Объявляется в `*.tftest.hcl` через `mock_provider "aws"`. Точечно подменить отдельный ресурс или data-source, `override_resource` и `override_data`. Без mock'ов любой `command = apply` будет требовать LocalStack.
Утилита terraform-compliance читает plan-файл (`plan.json`) и применяет к нему BDD-правила в Gherkin. «Given a resource of type X, it must contain a property Y», читаемо для не-инженеров, гарантирует политику до apply. Альтернатива OPA/Rego для команд, которые предпочитают естественный язык, но менее мощная, нельзя писать сложные cross-resource проверки.
Terratest, Go-библиотека от Gruntwork. Поднимает Terraform, ходит по AWS-API проверять что ресурсы реально созданы такими, как ожидаем, затем сносит. Тяжелее нативного `.tftest.hcl`, но даёт то, чего тот не даст: проверки облачного состояния, HTTP-запросы к подъятому сервису, table-driven тесты, retry-логика. Тесты на Go в `_test.go` файлах рядом с модулями.
Инфраструктура, не приложение, тест-пирамиду применять буквально не стоит. Тестируй контракты модулей, бизнес-правила, сложные expressions, рефакторинги без destroy. Не тестируй что provider работает, что AWS-API отвечает 200, и тривиальный `name = var.name`. Цель, ловить регрессии, не доказывать корректность.