2017-01-13 3 views
2

私はビューの年齢に基づいてスコアを生成するクエリを持っています。ご覧のとおり、私はSQLで年齢計算を行っています。クエリは次のようになります。私はunittests(djangoとsqlite)のデータベース時間をフリーズ

self.assertEqual(actual_score, expected_score) 

通常のような何かをしたい、私のユニットテストで

SELECT 
    SUM(1.0/(julianday('now') - julianday(view.date))) as score 
FROM 
    view; 

私はpythonで年齢計算をしていた場合、私はちょうどdjango.test.utils.freeze_timeようなもので、時間を凍結することができます。しかし、日付差分はSQLで行われているので、可能性はありません。

julianday('now')が構成済みの値を生成し、予想されるスコアを正確に計算できるように、単体テストで時間を固定するにはどうすればよいですか。

答えて

0

SQLiteは、同じクエリ内のすべての時間関数が同じ時間を返すことを保証します。ただし、これは複数のステートメントには適用されません。

julianday()(または使用している機能)を置き換える独自のユーザー定義関数をインストールできます。または、VFSと書いてください。

+0

私は 'julianday'に複数のステートメントを使用していることを意味していますか? –

+0

いいえ、それは相対的な時間だけを使用する場合には有用な保証になるかもしれません。 –

関連する問題