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