Teste Unitário de Arquitetura com ArchUnit.NET


Testes unitários de arquitetura ajudam a garantir que a estrutura do seu sistema siga padrões e boas práticas. Com o ArchUnit.NET, podemos escrever testes que verificam se nossa arquitetura está sendo seguida corretamente. Fato: A maioria dos desenvolvedores não conhecem sobre testes unitários para arquitetura. Quando apresento o assunto em sala de aula, ou até mesmo no dia de trabalho, é percebido que muitas vezes o desenvolvedor acaba por negligenciar coesão e/ou acoplamento.

##O que é ArchUnit.NET? ArchUnit.NET é uma biblioteca para validar regras arquiteturais em projetos .NET. É especialmente útil para equipes que desejam manter a arquitetura do projeto limpa e modular ao longo do tempo.

Exemplo de Código: Verificando Dependências Entre Camadas Vamos ver um exemplo simples de como escrever um teste unitário de arquitetura para garantir que a camada Service não dependa diretamente da camada Data:

using ArchUnitNET.Domain;
using ArchUnitNET.Fluent;
using Xunit;

public class ArchitectureTests
{
    [Fact]
    public void ServicesShouldNotDependOnDataLayer()
    {
        var serviceLayer = Classes().That().ResideInNamespace("MyApp.Services");
        var dataLayer = Classes().That().ResideInNamespace("MyApp.Data");

        IArchRule rule = serviceLayer.Should().NotDependOnAny(dataLayer);

        // ✅ Executa o teste de arquitetura
        rule.Check(ArchitectureExtractor.ExtractArchitecture());
    }
}

##Explicação: ResideInNamespace(“MyApp.Services”): Seleciona todas as classes que estão no namespace Services. NotDependOnAny(dataLayer): Define a regra de que nenhuma classe do namespace Services pode depender diretamente de Data. rule.Check(…): Executa a regra e valida se a arquitetura está sendo seguida.

##Benefícios: Consistência: Garante que as dependências sejam gerenciadas de forma clara e controlada. Manutenção: Reduz a complexidade para futuras manutenções, mantendo o sistema organizado. Qualidade: Facilita a adesão a boas práticas de design de software.

##Referências ArchUnit.NET : https://github.com/TNG/ArchUnitNET