Django プロジェクトで管理コマンドとして実行されている一連の統合レベルのテストがあります。これらのテストは、外部ソースからデータベースに取り込まれた大量の気象データの整合性を検証しています。私は非常に大量のデータを持っているため、テストが意味のあるものになるように、実稼働データベースに対してテストする必要があります。私が理解しようとしているのは、そのコマンドまたは接続オブジェクトに固有の読み取り専用データベース接続を定義する方法です。また、これらのテストは ORM を通過できないため、生の SQL を実行する必要があることも付け加えておきます。
私のテストの構造は次のようになります
class Command(BaseCommand):
help = 'Runs Integration Tests and Query Tests against Prod Database'
def handle(self,*args, **options):
suite = unittest.TestLoader().loadTestsFromTestCase(TestWeatherModel)
ret = unittest.TextTestRunner().run(suite)
if(len(ret.failures) != 0):
sys.exit(1)
else:
sys.exit(0)
class TestWeatherModel(unittest.TestCase):
def testCollectWeatherDataHist(self):
wm = WeatherManager()
wm.CollectWeatherData()
self.assertTrue(wm.weatherData is not None)
WeatherManager.CollectWeatherData() メソッドは次のようになります。
def CollecWeatherData(self):
cur = connection.cursor()
cur.execute(<Raw SQL Query>)
wm.WeatherData = cur.fetchall()
cur.close()
他の誰か (または私) が後でやって来て、誤って運用データベースを変更するテストを作成できないように、これをどうにかしてばかで証明したいと考えています。