Pular para o conteúdo
Skillpedia
Testes280 mil · #97

perl-testing

Orienta seu agente na criação de testes para código Perl. Ajuda a usar ferramentas como Test2::V0 e a medir a cobertura do código.

O que ela faz

Esta ferramenta ajuda você a escrever e organizar testes para seu código Perl. Ela usa métodos modernos como Test2::V0 e Test::More para garantir que seu código funcione corretamente e para verificar a cobertura dos testes.

Quando usar

  • ✓Escrever novos testes para um programa Perl.
  • ✓Verificar se os testes existentes em um projeto Perl estão funcionando bem.
  • ✓Melhorar a forma como os testes são organizados em um projeto.

Exemplo do que pedir para a IA

“Como posso escrever um teste simples para verificar se uma função adiciona dois números corretamente em Perl?”

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

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/perl-testing/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/perl-testing/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta fornece exemplos e estruturas para escrever testes em Perl. Você pode usar 'Test::More' ou o mais moderno 'Test2::V0' para definir o que seu código deve fazer e verificar se ele faz. Ela também ajuda a organizar esses testes e a rodá-los com a ferramenta 'prove'.

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 perl-testing

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/perl-testing/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Teste em Perl

Estratégias abrangentes de teste para aplicações Perl usando Test2::V0, Test::More, prove e metodologia TDD.

Quando Ativar

  • Escrevendo novo código Perl (siga TDD: vermelho, verde, refatorar)
  • Projetando suítes de teste para módulos ou aplicações Perl
  • Revisando a cobertura de testes Perl
  • Configurando infraestrutura de testes Perl
  • Migrando testes de Test::More para Test2::V0
  • Depurando testes Perl que falham

Fluxo de Trabalho TDD

Sempre siga o ciclo VERMELHO-VERDE-REFATORAR.

# Step 1: RED — Write a failing test
# t/unit/calculator.t
use v5.36;
use Test2::V0;

use lib 'lib';
use Calculator;

subtest 'addition' => sub {
    my $calc = Calculator->new;
    is($calc->add(2, 3), 5, 'adds two numbers');
    is($calc->add(-1, 1), 0, 'handles negatives');
};

done_testing;

# Step 2: GREEN — Write minimal implementation
# lib/Calculator.pm
package Calculator;
use v5.36;
use Moo;

sub add($self, $a, $b) {
    return $a + $b;
}

1;

# Step 3: REFACTOR — Improve while tests stay green
# Run: prove -lv t/unit/calculator.t

Fundamentos do Test::More

O módulo de teste padrão do Perl — amplamente utilizado, vem com o core.

Asserções Básicas

use v5.36;
use Test::More;

# Plan upfront or use done_testing
# plan tests => 5;  # Fixed plan (optional)

# Equality
is($result, 42, 'returns correct value');
isnt($result, 0, 'not zero');

# Boolean
ok($user->is_active, 'user is active');
ok(!$user->is_banned, 'user is not banned');

# Deep comparison
is_deeply(
    $got,
    { name => 'Alice', roles => ['admin'] },
    'returns expected structure'
);

# Pattern matching
like($error, qr/not found/i, 'error mentions not found');
unlike($output, qr/password/, 'output hides password');

# Type check
isa_ok($obj, 'MyApp::User');
can_ok($obj, 'save', 'delete');

done_testing;

SKIP e TODO

use v5.36;
use Test::More;

# Skip tests conditionally
SKIP: {
    skip 'No database configured', 2 unless $ENV{TEST_DB};

    my $db = connect_db();
    ok($db->ping, 'database is reachable');
    is($db->version, '15', 'correct PostgreSQL version');
}

# Mark expected failures
TODO: {
    local $TODO = 'Caching not yet implemented';
    is($cache->get('key'), 'value', 'cache returns value');
}

done_testing;

Test2::V0 Framework Moderno

Test2::V0 é o substituto moderno para Test::More — asserções mais ricas, melhores diagnósticos e extensível.

Por que Test2?

  • Comparação profunda superior com construtores de hash/array
  • Melhor saída de diagnóstico em falhas
  • Subtestes com escopo mais limpo
  • Extensível via plugins Test2::Tools::*
  • Compatível com versões anteriores com testes Test::More

Comparação Profunda com Construtores

use v5.36;
use Test2::V0;

# Hash builder — check partial structure
is(
    $user->to_hash,
    hash {
        field name  => 'Alice';
        field email => match(qr/\@example\.com$/);
        field age   => validator(sub { $_ >= 18 });
        # Ignore other fields
        etc();
    },
    'user has expected fields'
);

# Array builder
is(
    $result,
    array {
        item 'first';
        item match(qr/^second/);
        item DNE();  # Does Not Exist — verify no extra items
    },
    'result matches expected list'
);

# Bag — order-independent comparison
is(
    $tags,
    bag {
        item 'perl';
        item 'testing';
        item 'tdd';
    },
    'has all required tags regardless of order'
);

Subtestes

use v5.36;
use Test2::V0;

subtest 'User creation' => sub {
    my $user = User->new(name => 'Alice', email => 'alice@example.com');
    ok($user, 'user object created');
    is($user->name, 'Alice', 'name is set');
    is($user->email, 'alice@example.com', 'email is set');
};

subtest 'User validation' => sub {
    my $warnings = warns {
        User->new(name => '', email => 'bad');
    };
    ok($warnings, 'warns on invalid data');
};

done_testing;

Testando Exceções com Test2

use v5.36;
use Test2::V0;

# Test that code dies
like(
    dies { divide(10, 0) },
    qr/Division by zero/,
    'dies on division by zero'
);

# Test that code lives
ok(lives { divide(10, 2) }, 'division succeeds') or note($@);

# Combined pattern
subtest 'error handling' => sub {
    ok(lives { parse_config('valid.json') }, 'valid config parses');
    like(
        dies { parse_config('missing.json') },
        qr/Cannot open/,
        'missing file dies with message'
    );
};

done_testing;

Organização de Testes e prove

Estrutura de Diretórios

t/

…
Perguntas frequentes

O que é TDD?

TDD significa Test-Driven Development (Desenvolvimento Guiado por Testes). É uma abordagem onde você escreve um teste primeiro, depois o código para fazer o teste passar, e então melhora o código.

Qual a diferença entre Test::More e Test2::V0?

Test2::V0 é uma versão mais nova e poderosa do Test::More, oferecendo mais recursos e melhores diagnósticos de erros.

O que é 'cobertura de teste'?

Cobertura de teste é uma métrica que mostra qual parte do seu código foi executada pelos seus testes. Ajuda a identificar partes do código que não foram testadas.

Detalhes

Descrição original do autor

Perl testing patterns using Test2::V0, Test::More, prove runner, mocking, coverage with Devel::Cover, and TDD methodology. Use when writing Perl tests with Test2::V0 or Test::More, or measuring coverage.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#97
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas