Testare unitară

Principii de inginerie software în Python

Adam Spannbauer

Machine Learning Engineer at Eastman

De ce testare?

  • Confirmați că codul funcționează conform așteptărilor
  • Asigurați că modificările dintr-o funcție nu afectează alta
  • Protejați împotriva modificărilor dintr-o dependență
Principii de inginerie software în Python

Testare în Python

  • doctest
  • pytest

logo pytest

Principii de inginerie software în Python

Utilizarea doctest

def square(x):
    """Square the number x

    :param x: number to square
    :return: x squared

    >>> square(3)
    9
    """
    return x ** 3


import doctest doctest.testmod()
Failed example:
    square(3)
Expected:
    9
Got:
    27
Principii de inginerie software în Python

Structura pytest

Structura testelor

Principii de inginerie software în Python

Structura pytest

Structura testelor

Principii de inginerie software în Python

Scrierea testelor unitare

lucru în workdir/tests/test_document.py

from text_analyzer import Document


# Test tokens attribute on Document object
def test_document_tokens():
    doc = Document('a e i o u')

    assert doc.tokens == ['a', 'e', 'i', 'o', 'u']

# Test edge case of blank document def test_document_empty(): doc = Document('') assert doc.tokens == [] assert doc.word_counts == Counter()
Principii de inginerie software în Python

Scrierea testelor unitare

# Create 2 identical Document objects
doc_a = Document('a e i o u')
doc_b = Document('a e i o u')

# Check if objects are ==
print(doc_a == doc_b)

# Check if attributes are == print(doc_a.tokens == doc_b.tokens) print(doc_a.word_counts == doc_b.word_counts)
False

True True
Principii de inginerie software în Python

Rularea pytest

lucru cu terminal

datacamp@server:~/work_dir $ pytest
collected 2 items

tests/test_document.py ..                     [100%]

========== 2 passed in 0.61 seconds ==========
Principii de inginerie software în Python

Rularea pytest

lucru cu terminal

datacamp@server:~/work_dir $ pytest tests/test_document.py
collected 2 items

tests/test_document.py ..                     [100%]

========== 2 passed in 0.61 seconds ==========
Principii de inginerie software în Python

Teste eșuate

lucru cu terminal

datacamp@server:~/work_dir $ pytest
collected 2 items

tests/test_document.py F.

============== FAILURES ==============
________ test_document_tokens ________

def test_document_tokens(): doc = Document('a e i o u')

assert doc.tokens == ['a', 'e', 'i', 'o']
E AssertionError: assert ['a', 'e', 'i', 'o', 'u'] == ['a', 'e', 'i', 'o']
E Left contains more items, first extra item: 'u'
E Use -v to get the full diff

tests/test_document.py:7: AssertionError
====== 1 failed in 0.57 seconds ======
Principii de inginerie software în Python

Să exersăm!

Principii de inginerie software în Python

Preparing Video For Download...