PytestとUnitest


初めてPythonの開発を始めたとき、主にunittestをユニットテストフレームワークとして使用しました.しかし、GithubやStackOverflowでは、pytestを推奨する開発者はunittestよりずっと多い.なぜならpyttestはunittestに比べて使いやすく、Pythonスタイルガイド(PEP 8)に従って簡潔なコードを書くのに役立ち、fixtureの使用、custom assertの使用などの利点があるからです.
Pytest vs Unittestsamplecode.pyファイルにCalcクラスがあると仮定し、以下に示す.
# samplecode.py
class Calc:

    def __init__(self):
        pass

    def addtion(self, a, b):
        return a + b

    def subtraction(self, a, b):
        return a - b

    def division(self, a, b):
        return a/b
Unittest
上記のコードをテストするために作成されたUnitテストコードは以下の通りです.
import unittest

from samplecode import Calc


class CalcTest(unittest.TestCase):
    def setUp(self):
        self.a = Calc()

    def test_addition(self):
        self.assertEqual(self.a.addtion(1,2), 3)

    def test_subtraction(self):
        self.assertEqual(self.a.subtraction(2,1), 1)

    def test_division(self):
        self.assertEqual(self.a.division(4,2), 2)
簡単なテストコードなので毒性が良く欠点がないと思われるかもしれませんが、Unittestが作成したテストコードの操作は複雑で次のようになります.
  • unitestフレームワークはTestCaseにインポートされます.
  • TestCaseを継承するCalTestクラスを生成します.
  • に必要なテストボックスをCalTest内で作成する方法.
  • を検証するために、unittest.TestCaseself.assert*の方法が使用される.
  • Pytest
    それでは今回はPytestでテストコードを書きましょう.
    import pytest
    
    from samplecode import Calc
    
    
    @pytest.fixture
    def calc():
        a = Calc()
        return a
    
    
    def test_addition(calc):
        assert calc.addtion(1,2) == 3
    
    
    def test_subtraction(calc):
        assert calc.subtraction(2, 1) == 1
    
    
    def test_division(calc):
        assert calc.division(4, 2) == 2
    Pytestを使用することで、他のモジュールや使用クラスをインポートする必要はありません.また、self.assert*の方法のように何かを勉強したり覚えたりする必要はありません.
    それ以外にもPytestには多くの利点があります.組み込みUnitestと一緒に作業し、簡単な文法で簡単に起動できます.また、Fixtureを使用すると、コードの重複を減らすことができ、Fixtureを1つのファイルに集約し、すべてのテストコードで共有して使用することができます.
    後でPytestをさらに整理します