TDD com Python

Lucas Souto

Seu palestrante de hoje

  • Desenvolvedor com influências Pythonicas
  • Bacharel em Ciência da Computação
  • Organizador do PUG-MA (Python User Group Maranhão)
  • Fascinado com coisas novas e por isso estou aqui falando de TDD

Metodologias de Desenvolvimento

Tradicionais

Cascata

Incremental

Prototipação

Ágeis

Scrum

XP

Kanban

Manifesto para Desenvolvimento Ágil de Software

  • Indivíduos e interações mais que processos e ferramentas
  • Software em funcionamento mais que documentação abrangente
  • Colaboração com o cliente mais que negociação de contratos
  • Responder a mudanças mais que seguir um plano

Mas e as tecnicas para o desenvolvimento do seu software/código?

  • Estruturado
  • POO
  • Design Patterns
  • TDD, BDD, DDD
  • Paradigma Funcional

Então o que é o tal do TDD?

Tipos de Testes

Testes unitários

Testes funcionais

Testes de integração

Onde Python entra nessa teoria toda?

from unittest import TestCase
from my_project import soma

class TestClass(TestCase):
    def test_basic(self):
        self.assertEquals(1, 1)

    def test_soma(self):
        result = soma(1, 2)
        self.assertEquals(result, 3)

Sou desenvolvedor web e só uso Django

Mas antes disso

https://docs.djangoproject.com/en/1.11/topics/testing/tools
from django.test import TestCase
from .models import People

class PeopleTestCase(TestCase):
    def setUp(self):
        People.objects.create(name="Lucas",
                              expertise="consertar bugs")
        People.objects.create(name="Juliana",
                              expertise="fazer massagem")

    def test_people_expertise(self):
        lucas = People.objects.get(name="Lucas")
        juliana = People.objects.get(name="Juliana")

        self.assertEqual(lucas.what_expertise(),
                         'Lucas é especialista em "consertar bugs"')
        self.assertEqual(juliana.what_expertise(),
                         'Juliana é especialista em "fazer massagem"')

Testando o código!

$ python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).

---------------------------------------------------------------
Ran 1 tests in 0.017s

OK
Destroying test database for alias 'default'...

Perguntas?