Ответ
При тестировании DDD-приложения фокус должен быть на доменных моделях и агрегатах, так как они содержат ключевую бизнес-логику.
Основные тестируемые аспекты:
- Инварианты агрегатов – проверка корректности состояний и соблюдения бизнес-правил.
- Value Objects – валидация данных и поведения неизменяемых объектов.
- Domain Events – корректность генерации и обработки событий.
- Сервисы домена – логика, не принадлежащая конкретному агрегату.
Пример теста агрегата:
func TestOrder_Aggregate(t *testing.T) {
order := NewOrder("order-123")
err := order.AddItem("item-1", 2, 100)
if err != nil {
t.Fatal("Failed to add item:", err)
}
if order.Total() != 200 {
t.Error("Incorrect total calculation")
}
}
Интеграционные тесты репозиториев и внешних сервисов – вторичны, их можно покрывать позже.