トップ回答者
テストのために正規表現に基づいた文字列を取得したい。

質問
-
お世話になります。
正規表現にマッチするランダムの文字列を取得する方法(ロジック)というのはないでしょうか?
理想としてはこんな形です。
string testStr = GetRandomString(string "正規表現", int 文字列の長さ)
ExcelやCSVからの文字列の読み込み、charの文字配列からのランダムな文字の取得で生成した文字列の読み込み
などを利用して、テスト用の文字列のデータを作成しているのですが、
正規表現に基づいた文字列生成がコード上でできればテストデータの作成がより柔軟で簡単にできると考えています。
VSTSのデータジェネレータ機能を利用すると、データベースのレコードについて、正規表現に基づいたランダムの文字列を
生成してテストデータを作成できるのですが、それと同じように、正規表現を渡してあげると、その正規表現にマッチする文字列を
戻してくれるというロジックの部分を探している状況です。
正規表現ジェネレータ
http://msdn.microsoft.com/ja-jp/library/aa833197.aspx
回答
-
具体的なコードではありませんし、これを実装しようと思ったら正規表現をパースするところから作らなければなりませんが、つぎのような論文があります。
http://www.cosc.canterbury.ac.nz/research/reports/TechReps/1997/tr_9710.pdf- 回答としてマーク CrimsonPork 2009年2月15日 5:46
すべての返信
-
佐祐理 の発言:
テストのターゲットは正規表現エンジン? それとも正規表現のパターン文字列?
前者ならそのようなジェネレータも有効でしょう。
けれども後者ならば、そもそもテストにならないのでは。
ジェネレータ側にバグがあったら更に無意味ですし。
テストファーストというか、成功させたい文字列と失敗させたい文字列を用意した方がいいと思います。ありがとうございます。
違ってたら申し訳ありませんが・・・。エンジンそのものを開発しているわけではないので、エンジンではないですね。また、パターン文字列が正規表現として適切な文字列かどうかをテストしたいわけでもないので、こちらでもないです。ただ、やはりテストの効果を高めたいというところが最終目標です。
アドバイスを頂いている、その文字列の用意という部分で活用したいという意図もあります。仕様としてこのような文字列の場合はこの処理、これの場合はこれといったようにあらかじめ想定しているものは静的に対応できますが、仕様漏れなどによって対応できてない部分がランダムな性格の値によってあぶりだされることを可能性として期待します。
また、そのランダムな性格の値の生成について、例えば郵便番号生成のロジック、電話番号生成のロジック、クレジットカード番号の生成ロジックというように分けるのではなく、正規表現が使えれば簡単かなと思うところです。
全然まだ見つかりませんが、長い目でもう少し探してみようかなと思います。 -
具体的なコードではありませんし、これを実装しようと思ったら正規表現をパースするところから作らなければなりませんが、つぎのような論文があります。
http://www.cosc.canterbury.ac.nz/research/reports/TechReps/1997/tr_9710.pdf- 回答としてマーク CrimsonPork 2009年2月15日 5:46
-
Kazuya Ujihara の発言:ありがとうございます。
具体的なコードではありませんし、これを実装しようと思ったら正規表現をパースするところから作らなければなりませんが、つぎのような論文があります。
http://www.cosc.canterbury.ac.nz/research/reports/TechReps/1997/tr_9710.pdf
参考にしたいと思います。