Skip to main content

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

Bate-papo do Copilot pode ajudar a atualizar 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 Copilot pode ajudá-lo a atualizar rapidamente os testes para corresponder às alterações de código, garantindo que seu conjunto de testes permaneça em sincronia com 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()

Prompt de exemplo

Você pode pedir Bate-papo do Copilot 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

Observação

A resposta a seguir é um exemplo. Respostas do Bate-papo do Copilot são não determinísticas, portanto, você pode obter uma resposta diferente da mostrada aqui.

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

Por exemplo, Bate-papo do Copilot 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 Copilot identifica qualquer ausência de cobertura de testes, como a nova faixa de desconto de 20% para valores acima de US$ 200.

Bate-papo do Copilot 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