quarkus-tdd
Faz seu agente usar desenvolvimento guiado por testes (TDD) com Quarkus. Ele escreve testes antes do código para garantir que novas funcionalidades e correções funcionem perfeitamente.
O que ela faz
Este guia ajuda você a escrever testes para seu código Quarkus. Ele ensina como verificar se seu código funciona corretamente, mesmo quando partes dele dependem de outros serviços.
Quando usar
- ✓Ao adicionar novas funcionalidades ao seu programa.
- ✓Ao corrigir erros no código existente.
- ✓Ao testar partes específicas do seu programa que se comunicam com outros sistemas.
Exemplo do que pedir para a IA
“Como posso testar se meu código envia a mensagem certa para o RabbitMQ?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele usa uma técnica chamada TDD (Desenvolvimento Guiado por Testes), onde você escreve os testes antes do código. Isso garante que você tenha verificações prontas para o seu código.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill quarkus-tddOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/quarkus-tdd/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Fluxo de Trabalho TDD com Quarkus
Orientação de TDD para serviços Quarkus 3.x com mais de 80% de cobertura (unitária + integração). Otimizado para arquiteturas orientadas a eventos com Apache Camel.
Quando Usar
- Novos recursos ou endpoints REST
- Correções de bugs ou refatorações
- Adicionando lógica de acesso a dados, regras de segurança ou fluxos reativos
- Testando rotas do Apache Camel e manipuladores de eventos
- Testando serviços orientados a eventos com RabbitMQ
- Testando lógica de fluxo condicional
- Validando operações assíncronas do CompletableFuture
- Testando a propagação do LogContext
Fluxo de Trabalho
- Escreva os testes primeiro (eles devem falhar)
- Implemente o código mínimo para passar
- Refatore com os testes verdes
- Garanta a cobertura com JaCoCo (meta de 80%+)
Testes Unitários com Organização @Nested
Siga esta abordagem estruturada para testes abrangentes e legíveis:
@ExtendWith(MockitoExtension.class)
@DisplayName("OrderService Unit Tests")
class OrderServiceTest {
@Mock
private OrderRepository orderRepository;
@Mock
private EventService eventService;
@Mock
private FulfillmentPublisher fulfillmentPublisher;
@InjectMocks
private OrderService orderService;
private CreateOrderCommand validCommand;
@BeforeEach
void setUp() {
validCommand = new CreateOrderCommand(
"customer-123",
List.of(new OrderLine("sku-123", 2))
);
}
@Nested
@DisplayName("Tests for createOrder")
class CreateOrder {
@Test
@DisplayName("Should persist order and publish fulfillment event")
void givenValidCommand_whenCreateOrder_thenPersistsAndPublishes() {
// ARRANGE
doNothing().when(orderRepository).persist(any(Order.class));
// ACT
OrderReceipt receipt = orderService.createOrder(validCommand);
// ASSERT
assertThat(receipt).isNotNull();
assertThat(receipt.customerId()).isEqualTo("customer-123");
verify(orderRepository).persist(any(Order.class));
verify(fulfillmentPublisher).publishAsync(receipt);
verify(eventService).createSuccessEvent(receipt, "ORDER_CREATED");
}
@Test
@DisplayName("Should reject missing customer id")
void givenMissingCustomerId_whenCreateOrder_thenThrowsBadRequest() {
// ARRANGE
CreateOrderCommand invalid = new CreateOrderCommand("", validCommand.lines());
// ACT & ASSERT
WebApplicationException exception = assertThrows(
WebApplicationException.class,
() -> orderService.createOrder(invalid)
);
assertThat(exception.getResponse().getStatus()).isEqualTo(400);
verify(orderRepository, never()).persist(any(Order.class));
verify(fulfillmentPublisher, never()).publishAsync(any());
}
@Test
@DisplayName("Should record error event when persistence fails")
void givenPersistenceFailure_whenCreateOrder_thenRecordsErrorEvent() {
// ARRANGE
doThrow(new PersistenceException("database unavailable"))
.when(orderRepository).persist(any(Order.class));
// ACT & ASSERT
PersistenceException exception = assertThrows(
PersistenceException.class,
() -> orderService.createOrder(validCommand)
);
assertThat(exception.getMessage()).contains("database unavailable");
verify(eventService).createErrorEvent(
eq(validCommand),
eq("ORDER_CREATE_FAILED"),
contains("database unavailable")
);
verify(fulfillmentPublisher, never()).publishAsync(any());
}
@Test
@DisplayName("Should reject null commands")
void givenNullCommand_whenCreateOrder_thenThrowsNullPointerException() {
// ACT & ASSERT
assertThrows(
NullPointerException.class,
() -> orderService.createOrder(null)
);
verify(orderRepository, never()).persist(any(Order.class));
}
}
}
Padrões Chave de Teste
- Classes @Nested: Agrupe testes pelo método que está sendo testado
- @DisplayName: Forneça descrições de teste legíveis para relatórios
- Convenção de Nomenclatura:
givenX_whenY_thenZpara clareza - Padrão AAA: Comentários explícitos de
// ARRANGE,// ACT,// ASSERT - @BeforeEach: Configure dados de teste comuns para reduzir duplicação
- assertDoesNotThrow: Teste cenários de sucesso sem capturar exceções
- assertThrows: Teste cenários de exceção com validação de mensagem usando AssertJ
- Cobertura Abrangente: Teste caminhos felizes, entradas nulas, casos extremos, exceções
- Verificar Interações: Use Mockito
verify()para garantir que os métodos sejam chamados corretamente
…
Perguntas frequentes
O que é TDD?
TDD significa Test-Driven Development (Desenvolvimento Guiado por Testes). É uma prática onde você escreve testes automatizados antes de escrever o código que eles vão testar.
O que são testes de integração?
Testes de integração verificam se diferentes partes do seu programa funcionam bem juntas, como se elas estivessem realmente se comunicando.
Por que usar Mockito?
Mockito é uma ferramenta que permite criar 'falsificações' de outras partes do seu programa. Isso ajuda a testar uma parte isoladamente, sem depender do funcionamento real das outras.
Detalhes
Descrição original do autor
Test-driven development for Quarkus 3.x LTS using JUnit 5, Mockito, REST Assured, Camel testing, and JaCoCo. Use when adding features, fixing bugs, or refactoring event-driven services.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #108
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
webapp-testing
Permite testar aplicações web locais, verificar funcionalidades e depurar o comportamento da interface. Captura screenshots e logs do navegador.
anthropics/skills
ponytail-audit
Faz uma auditoria completa do código. Ele encontra bugs, falhas de segurança, código lento e sugere o que remover ou melhorar.
DietrichGebert/ponytail
ponytail-review
Revisa a qualidade de uma mudança no código. Verifica se a lógica está correta, se é segura, rápida e se todas as linhas são necessárias.
DietrichGebert/ponytail