Рубрики
Без рубрики

Тесты Архитектурные – Стандартизировать уже архитектуру вашего проекта!

Введение Много раз, когда мы запускали проект, самая большая трудность, что possuímo… С пометкой “тестирование”, “разработка тестов”, “архитектура”, “java”.

Много раз, когда мы запускали проект, величайшая проблема, с которой мы владеем, – это во время организации между нашими пакеты, классы и параметры, какой класс может иметь доступ к определенной другой класс, после derrotarmos эту трудность, нашей следующей задачей является поддержание этой организации, и documentarmos для будущих разработчиков или даже мы, например, определяем архитектуру наш проект, это то, что вы увидите ниже!

Как было сказано ранее, а также организуем более наш проект и считаем конвенции, мы можем иметь документацию, также дружелюбно,как например видно ниже, мы видели правила, о том, где классы с аннотацией Entity должны находиться:

@ArchTest
    static final ArchRule entities_must_reside_in_a_domain_package =
            classes().that().areAnnotatedWith(Entity.class).should().resideInAPackage("..domain..")
                    .as("Entidades deverão residir no pacote de domínios");

Но что же теперь поместим руки в тесте?:)

В этой статье на вопрос, мы должны иметь следующие технологии на нашем проекте:

  1. Java 8+ : Язык Программирования Java в версии 8+
  2. Maven : Инструментом для управления зависимостями в Java.
  3. ArchUnit : Инструмент, который будет использоваться для развития наших тестов архитектурных
  4. Spring : Framework программирования

Я не буду вдаваться гораздо позже всех используемых технологий так как не наша цель в этой статье.

Настройка нашего проекта:

Так что мы можем использовать archunit в нашем проекте, необходимо добавить следующую зависимость:


    com.tngtech.archunit
    archunit-junit5
    0.18.0
    test

После этого мы сделаем создание одного класса call ArchitectureTest в нашем тестирования пакета, в котором будет иметь следующий реализации в первый момент:

@AnalyzeClasses(
        packages = "SeuPacote",
        importOptions = ImportOption.DoNotIncludeTests.class
)
public class ArchitectureTest {
}

Примечание: В приведенном выше примере, был введен параметр не включает в себя тесты на нашем проверки, но если вы хотите установить по умолчанию в имя его испытания, а также, может быть спокоен.:)

Вместе, мы будем задать один простой архитектуры, в которой мы будем иметь классы Controller , что будет в состоянии назвать только классы Service , и могут вызвать только классы Repository , как показано на рисунке ниже:

После этого будем определять, как будет выглядеть имя каждого класса и, наконец, какой будет пакет, что же будет располагаться, тем не менее, мы будем создавать свою архитектуру?:)

На 1-м шаге будем определить, как должен быть именем из наших классов, уже, что мы-люди чрезвычайно творческие, мы будем использовать название каждой аннотации в конце нашего класса, почему, будет, который никто никогда не подумал об этом раньше?:D

    @ArchTest
    static ArchRule ClassesQuePossuemAnotacaoController_DeveraoFinalizarComNomeController =
            classes()
                    .that().areAnnotatedWith(Controller.class)
                    .should().haveSimpleNameEndingWith("Controller")
            .as("Caro desenvolvedor, todas as nossas classes que estão anotadas como Controller, deverão ter o nome finalizado com Controller");

Как видно из вышеизложенного, использование тестов ArchUnit являются простыми и достаточно понятными, в рамках нашего тестирования мы о том, что каждый класс, аннотированный как Controller , должны иметь имя оформлено как Controller и, кроме того, мы оставляем совет для следующего разработчика, который не сделаете того, как мы планируем, с помощью “.все (….)”, не круто ли это?:)

Я заставил ошибку, изменив название нашего класса для UsuarioJoao посмотрите , прохладно, что произошло:

После этого, просто мы создадим правила для наших других классов, но это сейчас я оставлю для вас, чтобы попробовать:)

Если вы не можете, не волнуйтесь, просто открыть GitHub проекта:)

На 2-м шаге мы будем определять, где каждый класс будет находиться, тест может быть достаточно похож на предыдущий, так что давай?:)

@ArchTest
    static ArchRule ClassesQuePossuemAnotacaoController_DeveraoResidirNoPacoteController =
            classes()
                    .that().areAnnotatedWith(Controller.class)
                    .should().resideInAPackage("..controller..")
                    .as("Caro desenvolvedor, todas as nossas classes que estão anotadas como Controller, deverão residir no pacote *.controller");

В приведенном выше примере, обратите внимание на “.resideInAPackage(…)”, который будет иметь место, на что наш класс действительно будет находиться.

Наконец, мы завершим наш вызов, мы должны определить, какой класс будет вызывать другой, чтобы таким образом, мы в какой класс может знать другого, для этого мы следовать примеру ниже:

 @ArchTest
    static final ArchRule ClassesQueResidemNoPacoteControllerNaoPodemConhecerRepository =
            noClasses().that().resideInAPackage("..controller..")
                    .should().dependOnClassesThat().resideInAPackage("..repository..")
            .as("As classes Repository não podem ficar juntas das classes Controller :(");

В приведенном выше примере, мы определили, что ни один класс находится в пакете Controller может зависеть от того, ни один класс находится в пакете Repository , , грустная история любви, не так ли?:D

Я благодарю всех вас, кто читал мои статьи, и которые сопровождают меня на создание моих контент:)

O ArchUnit , имеет отличный документации и помогает мне в проекты, которые я запускаю в мой день, в день, который вы думаете, представить это в своих проектах?:)

Оригинал: “https://dev.to/gabrielaugusto1996/testes-arquiteturais-padronize-ja-a-arquitetura-do-seu-projeto-10fe”