終了順序がかなり柔軟な場合に、生成された文字列をユニット化する方法。キーと値のペアから生成された SQL を出力するコードをテストしようとしているとしましょう。ただし、多くのフラグメントの正確な順序は重要ではありません。
例えば
SELECT
*
FROM
Cats
WHERE
fur = 'fluffy'
OR
colour = 'white'
と機能的に同一です
SELECT
*
FROM
Cats
WHERE
colour = 'white'
OR
fur = 'fluffy'
条件句が生成される順序は重要ではありませんが、where 句の後に続くことは重要です。entrySet()
また、 a の をループするときのペアの順序は予測できないため、予測するのは困難HashMap
です。キーを並べ替えるとこれは解決しますが、ビジネス価値がない (または負の) 場合に実行時のペナルティが発生します。
順序を過度に指定せずに、そのような文字列の生成を単体テストするにはどうすればよいですか?
正規表現の使用を考えましたが、次のような書き方が思いつきませんでした:
正規表現は私が考えていたものですが、「SELECT * FROM Cats WHERE」の後に {"fur = 'fluffy', color = 'white'} のいずれかが続き、その後に「OR」followed by one of one of {"fur = 'fluffy',
色が続くような正規表現を考えることができます= 'white'} ... 前回使用したものではありません。
注意:私は実際に SQL でこれを行っているわけではありません。問題を組み立てる簡単な方法を作成しただけです。