Ferramentas Pessoais
Acessar

Ir para o conteúdo. | Ir para a navegação

Navegação

Exercícios

Exercício 1: Teste unitário 1

Crie o módulo tests.py em treinamento.policy/treinamento/policy:

import unittest2 as unittest


class TreinamentoTestes(unittest.TestCase):

    def test_bobo(self):
        self.assertEqual(1, 1)

Para rodar os testes implementados no pacote treinamento.policy:

./bin/test -s treinamento.policy

Exercício 2: Teste unitário 2

Crie o módulo funcoes.py em treinamento.policy/treinamento/policy:

def hello_world():
    return 'Hello World!'

Crie teste em tests.py chamado test_hello_world para testar a função acima.

from treinamento.policy import funcoes

Exercício 3: Teste unitário 3

Crie um teste para a seguinte função:

def soma(num1, num2):
    return num1 + num2

Crie um loop que será executado 20 vezes. Para cada iteração, gerar dois números aleatórios e testá-los como parâmetros para a função soma.

Exercício 4: Brincando com TDD 1

No módulo funcoes.py, crie uma função chamada xxx para passar no seguinte teste (transcreva-o em tests.py):

def test_xxx(self):

    entrada = [100, 20, 30, 42, 50, 60]
    resultado = [100, 20, 30, 42]
    self.assertEqual(funcoes.xxx(entrada), resultado)

    entrada = [11, 15, 42, 10, 42, 16]
    resultado = [11, 15, 42]
    self.assertEqual(funcoes.xxx(entrada), resultado)

Exercício 5: Brincando com TDD 2

Nosso objetivo é criar uma função geradora de ids semelhante à do Plone. Vejamos alguns exemplos:

Títuloid
Pasta 1 pasta-1
Minha notícia minha-noticia
João joao

Em tests.py, crie o teste chamado test_generate_id.

Em seguida, crie a função generate_id.

Verifique sua solução.

Exercício 6: Instalando o plone.app.testing

Vamos utilizar algumas layers definidas no pacote plone.app.testing. Para instalá-lo, em develo.cfg

eggs +=
    ...
    plone.app.testing

Rodar buildout (./bin/buildout -c develop.cfg)

Exercício 7: Configurando as Layers

treinamento.policy/treinamento/policy/testing.py:

from plone.testing import z2
from plone.app.robotframework.testing import AUTOLOGIN_LIBRARY_FIXTURE
from plone.app.testing import PloneSandboxLayer
from plone.testing import Layer
from plone.app.testing import PLONE_FIXTURE
from plone.app.testing import IntegrationTesting, FunctionalTesting


class MinhaLayer(PloneSandboxLayer):
    defaultBases = (PLONE_FIXTURE,)

    def setUp(self):
        print "Assembling space ship"

    def tearDown(self):
        print "Disasembling space ship"

    def testSetUp(self):
        print "Fuelling space ship in preparation for test"

    def testTearDown(self):
        print "Emptying the fuel tank"

MINHA_LAYER = MinhaLayer()

TREINAMENTO_INTEGRATION_TESTING = IntegrationTesting(
bases=(MINHA_LAYER,),
name="MinhaLayer:Integration")

TREINAMENTO_ROBOT_TESTING = FunctionalTesting(
bases=(MINHA_LAYER, AUTOLOGIN_LIBRARY_FIXTURE, z2.ZSERVER_FIXTURE),
name="Treinamento:Robot")

Exercício 8: Teste de integração

Crie a seguinte classe em tests.py:

class TestesIntegracao(unittest.TestCase):
    layer = TREINAMENTO_INTEGRATION_TESTING

    def test_portal_title(self):
        portal=self.layer['portal']
        self.assertEqual(portal.Title(), u'Plone site')

Exercício 9: Instalando o robotframework

Adicione plone.app.robotframework ao eggs de develop.cfg:

eggs =
    …
    plone.app.robotframework

Visiste a página do pacote no Pypi e copie o Known Good Versions mais recente e coloque na seção versions do buildout.cfg.

Rode o buildout:

./bin/buildout –c develop.cfg

Exercício 10: Teste Funcional 1

Vamos testar o link Acessibilidade do Plone.

Crie a pasta tests em treinamento.policy.treinamento.policy.

Crie o arquivo test_acessibilidade.robot dentro dessa pasta:

*** Settings ***

Library Selenium2Library timeout=10 implicit_wait=0.5

Suite Setup Start browser
Suite Teardown Close All Browsers

*** Test Cases ***

Plone Accessibility
    Goto homepage
    Click link Accessibility
    Page should contain Accessibility Statement

*** Keywords ***

Start browser
    Open browser http://localhost:55001/plone/

Goto homepage
    Go to http://localhost:55001/plone/
    Page should contain Plone site

Para iniciar o servidor do robot:

./bin/robot-server treinamento.policy.testing.TREINAMENTO_ROBOT_TESTING

Para rodar o teste:

./bin/robot src/treinamento.policy/treinamento/policy/tests/

Exercício 11: Login

Criar o arquivo tests/test_login.robot:

*** Settings ***

Library Selenium2Library timeout=10 implicit_wait=0.5
Library treinamento.policy.testing_keywords.Keywords

Suite Setup Start browser
Suite Teardown Close All Browsers

*** Test Cases ***

Log in
    ${TEST_USER_NAME} = Get test user name
    ${TEST_USER_PASSWORD} = Get test user password
    Go to http://localhost:55001/plone/login_form
    Page should contain element __ac_name
    Input text __ac_name ${TEST_USER_NAME}
    Input text __ac_password ${TEST_USER_PASSWORD}
    Click Button Log in
    Page should contain element css=#user-name

*** Keywords ***

Start browser
    Open browser http://localhost:55001/plone/

Criar um módulo chamado testing_keywords em treinamento.policy/treinamento/policy:

class Keywords(object):

    def get_test_user_name(self):
        import plone.app.testing
        return plone.app.testing.interfaces.TEST_USER_NAME

    def get_test_user_password(self):
        import plone.app.testing
        return plone.app.testing.interfaces.TEST_USER_PASSWORD

Execute o teste.