Neste exercício, iremos melhorar os testes de unidade de sistema de quiz. Você deve realizar os 3 commits descritos abaixo e submeter os 3 links dos commits via Moodle.
Primeiramente, explore o código do sistema em model.py.
Note que temos duas classes: Question (que representa as questões do quiz) e Choice (escolha das questões).
Explore também os cinco testes em tests.py para entender melhor como o sistema funciona: Por exemplo:
def test_create_question():
question = Question(title='q1')
assert question.id != None
def test_create_choice():
question = Question(title='q1')
question.add_choice('a', False)
choice = question.choices[0]
assert len(question.choices) == 1
assert choice.text == 'a'
assert not choice.is_correct
...Você deve realizar os 3 commits descritos abaixo e submeter os 3 links dos commits via Moodle.
Antes de iniciar as atividades de teste, precisamos configurar o repositório de trabalho.
Primeiramente, crie um fork deste repositório.
Para isso, basta clicar no botão Fork no canto superior direito.
Caso tenha dúvidas, verifique a documentação do GitHub sobre como criar fork de um repositório.
Neste projeto, utilizamos o GitHub Actions (ferramenta de CI/CD do GitHub) para executar os testes automaticamente a cada commit.
Abra o arquivo.github/workflows/tests.yml e observe que os testes são executados em três sistemas operacionais (Ubuntu, macOS e Windows) e várias versões da linguagem Python. Veja um exemplo em https://github.com/andrehora/quiz/actions/runs/14231638679.
Ative o GitHub Actions no seu repositório.
Para isso, basta ir na aba Actions e clicar no botão verde.
Em seguida, clone o seu repositório para uma pasta local e entre na pasta:
$ git clone https://github.com/<SEU-USUARIO>/quiz
$ cd quiz
Nossos testes utilizam o framework de testes pytest. Instale o pytest:
$ pip install pytest
Para executar os testes localmente, basta rodar o comando pytest -v tests.py:
$ pytest -v tests.py
========================================== test session starts ===========================================
...
tests.py::test_create_question PASSED [ 20%]
tests.py::test_create_multiple_questions PASSED [ 40%]
tests.py::test_create_question_with_invalid_title PASSED [ 60%]
tests.py::test_create_question_with_valid_points PASSED [ 80%]
tests.py::test_create_choice PASSED [100%]
=========================================== 5 passed in 0.01s ============================================
Os testes são executados automaticamente no GitHub Actions sempre que um commit é realizado.
Portanto, para rodar os testes no GitHub Actions, realize uma alteração qualquer neste arquivo README.md e faça o commit da alteração com a seguinte mensagem: Commit 1: Running the tests.
Em seguida, clique na aba Actions e veja que os testes foram executados com sucesso no GitHub Actions.
Observe as execuções em múltiplos sistemas operacionais e versões da linguagem Python.
Mudança no Readme
Crie mais dez testes de unidade no arquivo tests.py.
Utilize boas práticas, tais como (1) testar comportamentos, não métodos, (2) testar através de APIs públicas e (3) criar testes pequenos e focados.
Rode os testes localmente com o comando pytest -v tests.py.
Só faça o commit com os testes passando.
Com os testes passando, faça o commit com a seguinte mensagem: Commit 2: Creating 10 unit tests.
Crie pelo menos mais dois testes de unidade utilizando as fixtures do pytest. Por exemplo, você pode incluir na fixture uma questão com múltiplas escolhas, e esta questão será reutilizada nos testes.
Um exemplo simples do uso fixtures pode ser visto abaixo:
@pytest.fixture
def data():
return [1,2,3]
def test_sum(data):
assert sum(data) == 6
def test_max(data):
assert max(data) == 3
def test_in(data):
assert 1 in dataCom os testes passando, faça o commit com a seguinte mensagem: Commit 3: Testing with fixtures.