前提・実現したいこと
Djangoでpytest(Pythonのテストフレームワーク)を使ってテストコードを作成しており
テスト対象コード(①find.pyと②urls.py)に対するテストコード(③test_urls_class_NG.py)を作成し
テストすると以下のようなエラーが発生しました。
①find.pyの★①と★③を
③test_urls_class_NG.pyの★④ でインスタンス生成し引数を引き継がせて書いたつもりですが
この書き方は合っていますでしょうか?
また、もしこれ以外に原因などございましたらお教え願えないでしょうか?
発生している問題・エラーメッセージ
(trouble1) C:\Users\gdans\Desktop\trouble8_apptest\trouble8\tests>pytest test_urls_class_NG.py -v _________________________________________________________________________________________ ERROR at setup of test_url_find _________________________________________________________________________________________ file C:\Users\gdans\Desktop\trouble8_apptest\trouble8\tests\test_urls_class_NG.py, line 11 def test_url_find(self, request): E fixture 'self' not found > available fixtures: _dj_autoclear_mailbox, _django_clear_site_cache, _django_db_marker, _django_set_urlconf, _django_setup_unittest, _fail_for_invalid_template_variable, _live_server_helper, _template_string_if_invalid_marker, admin_client, admin_user, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, client, db, django_assert_max_num_queries, django_assert_num_queries, django_db_blocker, django_db_createdb, django_db_keepdb, django_db_modify_db_settings, django_db_modify_db_settings_parallel_suffix, django_db_modify_db_settings_tox_suffix, django_db_modify_db_settings_xdist_suffix, django_db_reset_sequences, django_db_setup, django_db_use_migrations, django_mail_dnsname, django_mail_patch_dns, django_test_environment, django_user_model, django_username_field, doctest_namespace, live_server, mailoutbox, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, rf, settings, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, transactional_db > use 'pytest --fixtures [testpath]' for help on them. C:\Users\gdans\Desktop\trouble8_apptest\trouble8\tests\test_urls_class_NG.py:11
該当のソースコード
◆①テスト対象コード:find.py
from django.shortcuts import render from django.views.generic import TemplateView **class FindResultView(TemplateView): ★① def __init__(self): ★②** title = 'title test' self.params ={ 'title':title, } ** def get(request, self): ★③** return render(request, 'find.html', self.params)
◆②テスト対象コード:urls.py
from django.urls import path from .find import FindResultView # find.py urlpatterns = [ path('find', FindResultView.as_view(), name='find'), ]
◆③テストコード:test_urls_class.py
import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trouble8_app.settings') import django django.setup() from django.urls import resolve from trouble8.find import FindResultView **def test_url_find(self, request): ★④ f = FindResultView(self, request) ★④** found = resolve('/trouble8/find') assert found.func == f
試したこと
エラーに「fixture 'self' not found」と書かれているので
クラス定義(①find.pyの★①、★②、★③)に対する 継承方法(③test_urls_class_NG.pyの★④)
の書き方でエラーが出ている可能性を疑い
f = FindResultView(self, request) ★④ の部分を
f = FindResultView() や f = FindResultView.get(self, request) に書き換えて実行したのですが同様のエラーが発生し改善できませんでした。
補足情報(FW/ツールのバージョンなど)
Python 3
anaconda3