25


私はdjangounittestpytest. pytestしかし、テストケースの方がコンパクトでわかりやすいと感じるようになりました。

これが私のテストケースです:

class OrderEndpointTest(TestCase):
    def setUp(self):
        user = User.objects.create_superuser(username='admin', password='password', email='pencil@gmail.com')
        mommy.make(CarData, _quantity=1)
        mommy.make(UserProfile, _quantity=1, user=user)

    def test_get_order(self):
        mommy.make(Shop, _quantity=1)
        mommy.make(Staff, _quantity=1, shop=Shop.objects.first())
        mommy.make(Order, _quantity=1, car_info={"color": "Black"}, customer={"name": "Lord Elcolie"},
                   staff=Staff.objects.first(), shop=Shop.objects.first())

        factory = APIRequestFactory()
        user = User.objects.get(username='admin')
        view = OrderViewSet.as_view({'get': 'list'})

        request = factory.get('/api/orders/')
        force_authenticate(request, user=user)
        response = view(request)
        assert 200 == response.status_code
        assert 1 == len(response.data.get('results'))

pytestで、バージョンはこちら

def test_get_order(car_data, admin_user, orders):
    factory = APIRequestFactory()
    user = User.objects.get(username='admin')
    view = OrderViewSet.as_view({'get': 'list'})

    request = factory.get('/api/orders/')
    force_authenticate(request, user=user)
    response = view(request)
    assert 200 == response.status_code
    assert 1 == len(response.data.get('results'))

からの利点pytestfixture別のファイルにあります。それらを入力パラメーターにすることで、テストケースをコンパクトにします。

Django を使用するメリットはありますunittestpytest?

更新: 2017 年 7 月 1 日
更新: 2017 年 7 月
5 日 更新: 2017 年 9 月 1
日 更新: 2017 年 9 月 29 日
更新: 2017 年 12 月 26 日

  1. Pytest は、テスト中にフィクスチャが変更されたときの問題を軽減します。そのランはtestcases個別に合格しましたが、徹底的に実行すると失敗します。
  2. エラーが発生した場合、Pytest はアサーション出力を表示します。Django の単体テストはそうではありません。自分でブレークポイントを設定し、エラーを調査する必要があります。
  3. Pytest では、単純なデコレータで実際のデータベースを使用できます。Django テストはしません。ジョブ用に独自のカスタマイズされたコマンドを作成する必要があります
  4. Pytest はジェネリックです。ジェネリックであることは、Django 以外のプロジェクトで快適に作業できることを意味します。たとえば、Flask + APScheduler、PyRad などのサードパーティなどのマイクロサービスを構築する必要がある場合などです。これについて言及するのは、バックエンドで Django を 50% 使用しているためですPython
  5. Pytest は多重継承を使用してフィクスチャを作成していません
  6. Unittest は、追加の構成なしでスムーズに実行することにより、ランナーとしてgitlab-ci使用すると Pytestよりも有利になります。問題Docker
4

2 に答える 2

4

私の経験は、インターネットで見られるものと矛盾しています。

私は Pytest と Unittest の両方で多くの経験を積んでおり、記事でこの問題に関する私の見解を説明しました。

これが誰かの役に立てば幸いです。フィードバックをいただければ幸いです。

于 2021-11-09T20:25:35.363 に答える