概要
TestNGはJavaのテストフレームワークです
さまざまなAssert
を使い、値を比較してテストが通ったかどうかを判定させます
ただ、TestNGが提供するAssertの種類に文字列の部分一致を行うテストがなく文字列に関しては完全一致によるテストしかありません
今回はTestNGで文字列の部分一致を実施する方法を紹介します
環境
- Java 1.6 Over
- TestNG 6.3.1
やり方
結論から記載すると以下のような感じで記載します
Assert.assertTrue(str.contains(expectedStr));
assertTrueとStringクラスのcontainsメソッドを使って実現します
assertTrueは引数がtrueの場合にテストを成功に倒してくれます
String クラスのcontainsメソッドは引数で指定した文字列が含まれている場合にtrueを返します
なのでこの組み合わせを使えば、文字列の部分一致によるテストが実現できます
ただ、この場合ちょっと残念なのは失敗した場合のログが「結果がtrueじゃなかったよ」と教えてくれるだけなので、比較した文字列の情報が何だったのかということまで教えてくれません
java.lang.AssertionError: expected:<true> but was:<false>
at org.testng.Assert.fail(Assert.java:89)
at org.testng.Assert.failNotEquals(Assert.java:489)
at org.testng.Assert.assertTrue(Assert.java:37)
at org.testng.Assert.assertTrue(Assert.java:47)
なので、比較した文字列の情報は別途ロギングする必要があります
TestNGを使う場合は上記でOKなのですが、そもそもTestNGを使わないというのも手です
Hamcrestというテストフレームワークがありこれを使えばcontainsString
というメソッドが使えこれが部分一致のテストになります
StackOverFlowにもそんな回答がありました
http://stackoverflow.com/questions/1092219/assertcontains-on-strings-in-junit
一番きれいなのはHamcrestを使う方法でしょうか
確かSpringIOでもテストフレームワークはJUnit+Hamcrestだったような記憶があります
こんばんは。
返信削除便利なフレームワークですね。