diff --git a/_images/tdd-fast-test-slow-test-2.png b/_images/tdd-fast-test-slow-test-2.png new file mode 100644 index 0000000..dce86a1 Binary files /dev/null and b/_images/tdd-fast-test-slow-test-2.png differ diff --git a/_images/tdd-fast-test-slow-test.png b/_images/tdd-fast-test-slow-test.png new file mode 100644 index 0000000..38493ff Binary files /dev/null and b/_images/tdd-fast-test-slow-test.png differ diff --git a/filosofando-testes.html b/filosofando-testes.html index 3b5d446..85f5495 100644 --- a/filosofando-testes.html +++ b/filosofando-testes.html @@ -55,7 +55,7 @@
- +

Filosofando sobre Testes

@@ -107,6 +107,17 @@
+
+

Agenda:

+ +
    +
  • TDD Kent Beck Style.
  • +
  • Fast Test, Slow Tests.
  • +
  • Explosão de testes.
  • +
  • Coverage.
  • +
+
+
TDD: Where it went wrong @@ -137,6 +148,8 @@

Reddit: Devo escrever testes para a validação interna do Django?

SIM!

+ +

... bom, talvez sim.

@@ -152,13 +165,109 @@
- + + +

Gary Bernhardt: Fast Test, Slow Test

+
+ +
+ +
+ +
+

Fast Test, Slow Test

+ +
    +
  • Testar modelos.
  • +
  • Testar views.
  • +
  • Testar controllers.
  • +
+ +

... soa familiar?

+
+ +
+

Fast Test, Slow Test

+ +
    +
  • Desenvolvedores podem testar, rapidamente, suas alterações.
  • +
  • Não significa que testes de integração não são necessários, + mas estes podem ser rodados no CI.
  • +
+ +

... continua soando familiar?

+
+ +
+

Fast Test, Slow Test

+ +

Qual o valor desse teste para o meu projeto?

+
+ +
+

Fast Test, Slow Test

+ +

Se eu estou escrevendo testes do meu modelo sem + que seja integrado com o meu controller, eu estou + testando o que?

+ +

Aderência a arquitetura do projeto.

+
+ +
+

Fast Test, Slow Test

+ +

Se o teste que verifica a funcionalidade para + o usuário (integração) produz mais valor + que o teste que garante a aderência do projeto à + uma arquitetura, qual teste deve ser rodado + primariamente?

+
+
+ +
+
+

A Explosão dos Testes Lentos

+
+ +
+

Explosão de Testes Lentos

+ +

"Testes de integração são lentos, então eu tenho que rodar-los + menos ou ter menos desses testes."

+
+ +
+

Explosão de Testes Lentos

+ +
    +
  • Rode apenas o teste da alteração que está sendo feita.
  • +
  • Rode os testes relacionados.
  • +
  • Deixe todos os demais testes para o CI.
  • +
+
+
+

Coverage

+
+ +
+

Coverage

+ +

Se os testes indicam quais funcionalidades devem estar + presentes...

+ +

... coverage vai indicar quais partes + de código não tem nada a ver com as funcionalidades que + vão ser entregues.

+
+
-

Exemplo

+

Coverage

+

Exemplo


 class Client:
@@ -168,27 +277,16 @@ class Client:
                     
-

Exemplo

+

Coverage

+

Exemplo

Novo requisito: "somente aceitar nomes válidos, que tem 2 palavras ou mais."

-

Exemplo

- -

SOLID principles:

-
    -
  • SRP - Single Responsability Principle
  • -
  • OCP - Open/closed principle
  • -
  • LSP - Liskov substitution principle (design by contract)
  • -
  • ISP - Interface Segreation Principle
  • -
  • DIP - Dependency Inversion Principle
  • -
-
- -
-

Exemplo

+

Coverage

+

Exemplo


 def _multiple_names(name):
@@ -207,7 +305,8 @@ class Client:
                     
-

Exemplo

+

Coverage

+

Exemplo


 import pytest
@@ -221,7 +320,8 @@ def test_multiple_name():
                     
-

Exemplo

+

Coverage

+

Exemplo


 def test_valid_name():
@@ -234,7 +334,8 @@ def test_invalid_name():
                     
-

Exemplo

+

Coverage

+

Exemplo


 def test_client_error():
@@ -247,7 +348,8 @@ def test_client():
                     
-

Exemplo

+

Coverage

+

Exemplo


 $ pytest client.py
@@ -262,7 +364,8 @@ client.py ......
                     
-

Exemplo

+

Coverage

+

Exemplo


 $ pytest --cov=client client.py
@@ -282,13 +385,15 @@ client.py      25      0   100%
                     
-

Exemplo

+

Coverage

+

Exemplo

"Não podemos perder a Cher, a Xuxa, a Madonna, a Björk e o String como clientes!"

-

Exemplo

+

Coverage

+

Exemplo


 class Client:
@@ -298,7 +403,8 @@ class Client:
                     
-

Exemplo

+

Coverage

+

Exemplo


 ==== FAILURES ====
@@ -315,7 +421,8 @@ client.py:37: Failed
                     
-

Exemplo

+

Coverage

+

Exemplo


 $ pytest  client.py
@@ -331,7 +438,8 @@ client.py ......
                     
-

Exemplo

+

Coverage

+

Exemplo


 $ pytest --cov=client  client.py
@@ -352,29 +460,35 @@ client.py      24      0   100%
                     
-

Exemplo

+

Coverage

+

Exemplo

Encontre o erro.

-
-
-

Resumo

- -
    -
  • Escreva testes que verifiquem requisitos, não a - implementação do requisito
  • -
  • Implementação pode mudar, os testes não deveriam.
  • -
  • Garanta que o teste dependa apenas de si mesmo - e não de outros testes.
  • -
  • Use cobertura (coverage) para identificar código - a ser removido, não para escrever mais testes.
  • -
+
+

Coverage

+ +

100% de cobertura de testes é possível.

+ +

... desde que esteja disposto a escrever + código que testa funcionalidades do usuário e não conformidade + de arquitetura e código não coberto seja apagado.

+

Perguntas?

+ +
+ +