Skip to main content

Atualizando testes de unidade para corresponder às alterações de código

Bate-papo do Copiloto pode ajudar na atualização de seus testes.

Quando você faz alterações em seu código, é importante atualizar todos os testes para verificar o novo comportamento e capturar os bugs que o novo código introduziu. Bate-papo do Copiloto pode ajudá-lo a atualizar rapidamente os testes para refletir as alterações no código, garantindo que seu conjunto de testes permaneça alinhado à sua implementação.

Cenário de exemplo

Imagine que você tenha uma função Python, calculate_discountque determina o desconto para um determinado valor de compra. No código original, você obtém um desconto de 10% para valores acima de US$ 100. Você está fazendo alterações na lógica da função, para que apenas os preços acima de US $ 150 obtenham um desconto de 10%, e agora há um desconto de 20% para valores acima de US $ 200.

Código original

No código original, os preços de compra acima de US$ 100 recebem um desconto de 10%.

def calculate_discount(amount: float) -> float:
    if amount > 100:
        return amount * 0.1  # 10% discount
    return 0.0

Código atualizado

No código alterado, apenas valores acima de US$150 obtêm um desconto de 10%, e valores acima de US$200 agora obtêm um desconto de 20%.

def calculate_discount(amount: float) -> float:
    if amount > 200:
        return amount * 0.2  
    elif amount > 150:
        return amount * 0.1
    return 0.0

Testes existentes

Este exemplo mostra os testes existentes que foram escritos para o código original.

import unittest
from discount import calculate_discount

class TestCalculateDiscount(unittest.TestCase):
    def test_discount_above_100(self):
        # $140 should get a $14 discount (10%)
        self.assertAlmostEqual(calculate_discount(140), 14.0)
    
    def test_discount_below_100(self):
        # $80 should get no discount
        self.assertEqual(calculate_discount(80), 0.0)

    def test_discount_exactly_100(self):
        # $100 is not above 100, so no discount
        self.assertEqual(calculate_discount(100), 0.0)

if __name__ == '__main__':
    unittest.main()

Exemplo de solicitação

Você pode pedir Bate-papo do Copiloto para identificar e atualizar todos os testes afetados pela alteração lógica.

Given the update to the `calculate_discount` function, update the unit tests that may fail or become outdated as a result.

Resposta de exemplo

Resposta: Esta é um exemplo.

Bate-papo do Copiloto analisa seu código e testes existentes e identifica quais testes falharão ou tornaram-se enganosos após a alteração de código.

Por exemplo, Bate-papo do Copiloto explica que: * test_discount_above_100 agora falhará * test_discount_below_100 e test_discount_exactly_100 serão aprovados, mas agora são enganosos, já que o limite para os 10% de desconto agora é de US$ 150, e não US$ 100.

Além disso, Bate-papo do Copiloto identifica qualquer cobertura de teste faltante, como um novo nível de desconto de 20% para valores superiores a US$ 200.

Bate-papo do Copiloto propõe um conjunto atualizado de testes.

Testes atualizados

import unittest
from discount import calculate_discount

class TestCalculateDiscount(unittest.TestCase):
    def test_discount_above_200(self):
        # $250 should get a $50 discount (20%)
        self.assertAlmostEqual(calculate_discount(250), 50.0)

    def test_discount_above_150(self):
        # $175 should get a $17.50 discount (10%)
        self.assertAlmostEqual(calculate_discount(175), 17.5)

    def test_discount_at_or_below_150(self):
        # $150 is not above 150, so no discount
        self.assertEqual(calculate_discount(150), 0.0)
        # $80 should get no discount
        self.assertEqual(calculate_discount(80), 0.0)

if __name__ == '__main__':
    unittest.main()

Leitura adicional