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