32
urls.py
を除いて、私のアプリケーションではどこでもテストカバレッジを100%達成しました。 私のURLの意味ある単体テストの書き方についての推奨事項はありますか?ユニットテストのdjangoのURLはどのようにするのですか?
FWIWこの疑問は、テスト駆動開発を試していて、問題を解決するコードを書く前にテストが失敗した場合に発生しました。
urls.py
を除いて、私のアプリケーションではどこでもテストカバレッジを100%達成しました。 私のURLの意味ある単体テストの書き方についての推奨事項はありますか?ユニットテストのdjangoのURLはどのようにするのですか?
FWIWこの疑問は、テスト駆動開発を試していて、問題を解決するコードを書く前にテストが失敗した場合に発生しました。
一つの方法は、reverse
URL名になり、テスト
from django.urls import reverse
url = reverse('archive', args=[1988])
assertEqual(url, '/archive/1988/')
url = reverse('archive-summary', args=[1988])
assertEqual(url, '/archive-summary/1988/')
あなたはおそらくビューをとにかくテストするには、今の例
urlpatterns = [
url(r'^archive/(\d{4})/$', archive, name="archive"),
url(r'^archive-summary/(\d{4})/$', archive, name="archive-summary"),
]
検証します。
さて、URLが右側のビューに接続することをテストするために、あなたは変数resolver
(ResolverMatch
クラスのインスタンス)に今resolve
from django.urls import resolve
resolver = resolve('/summary/')
assertEqual(resolver.view_name, 'summary')
を使用することができ、次のオプションを持っている
'app_name',
'app_names',
'args',
'func',
'kwargs',
'namespace',
'namespaces',
'url_name',
'view_name'
私の同僚はこのコンセプトを採用し、["assert"](https://github.com/incuna/incuna-test-utils/blob/master/incuna_test_utils/testcases/urls.py#L8)を[新しいユニットテストユーティリティライブラリ](https://github.com/incuna/incuna-test-utils)を参照してください。 – meshy
私は 'assertEqual(resolver.func.func_name、 'archive')'を使って、リゾルバが正しいビューにあることをテストします。私が知っている限り、 'resolver.view_name'は実際にはビューではなくURLルールの名前です。 –
一般的なDjangoテスト(ビュー)のURLには 'reverse(...) 'を使用するか、この場合は特に単体テストのURLを使用することをお勧めしますか?私はビューのテストでそれが多く使われているのを見ますが、アンチパターンのように感じます。 –