Python 2.7.6 で実行されている Django 1.4 プロジェクトに次のインポート行があります。
from django.contrib.gis.utils import GeoIP
この行は、本番環境と開発環境では 100% 正常に機能しますが、テストでは ImportError で失敗することがあります。次のダミー テストが与えられた場合:
from django.test import TestCase
from django.test.client import Client
class DummyTestCase(TestCase):
def test_GET_200_response_code(self):
c = Client()
response = c.get('/')
self.assertEqual(response.status_code, 200)
このモジュールのテストのみを実行すると、次のresponse = self.c.get('/')
行で失敗します。
...
File "...", line 19, in <module>
from django.contrib.gis.utils import GeoIP
ImportError: cannot import name GeoIP
ただし、この同じテストを含むテスト スイート全体を実行すると、問題なく合格します。そして、繰り返しになりますが、インポートはコンソールでは正常に機能し、サーバーでは開発および本番環境で正常に機能します。
では、なぜそれが起こっているのですか?このモジュールを含むすべてのテストを実行したとしても、この単一のテスト モジュールを実行した場合にのみ ImportError が発生し、それ以外の場合は決して発生しないのはなぜですか?
注: 現在、Django 1.4 を使用しています。インポート パスが変更さfrom django.contrib.gis.geoip import GeoIP
れ、. どちらの方法でも、インポート パスを切り替えると、上記と同じ動作が示されます。