TestNGのデフォルトのAssertionは、 org.testng.Assert クラスにstaticメソッドとして用意されてます。
import staticして使う形になると思います。
primitive型, Object, byte[], Object[], Collection, Set, Map などひと通り揃っています。
デフォルトのCollectionのassertは順番に依存します。順番がどうなるか分からないけど、要素だけ一致しているか確認したい場合は、一度Object[]に直した上でassertEqualsNoOrder()を使えば良いと思います。
自前のクラスのインスタンスを使ってる場合も、ちゃんとhashCode()やequals()を実装しておけば一致チェックしてくれる筈です・・・多分・・・。hashCode(), equals(), toString()はEclipseの自動生成を使うと楽ちんです。
というわけで、ざっくりとassertionを色々と呼び出してみたサンプルが以下になります:
上記の"TestAssertionSamples.java"に含めていますが、基本的にはお好みの一致チェックメソッドを作成して、一致に失敗したら org.testng.Assertのfaile()メソッドを呼び出します。
(原理的には java.lang.AssertionError をthrowしても同等に思えるのですが、試してみたらEclipse上のTestNGプラグインやコンソールのスタックトレースが一個前のassertEquals()になってしまいうまく動かなかったため、fail()の方を使ってます。github上のTestNGのソースを読めば、fail()も最終的にはAssertionErrorをthrowしてます)
void assertCalendarYearIs(Calendar actualCalendar, int expectedYear) throws AssertionError { int actualYear = actualCalendar.get(Calendar.YEAR); if (actualYear != expectedYear) { fail(String.format("expected [%d] but found [%d] in [%s]", expectedYear, actualYear, actualCalendar.toString())); } } @Test public void assertCalenderAndCustomAssertion() { Calendar ac = Calendar.getInstance(); ac.set(2000, 1, 2, 3, 4, 5); Calendar ec = Calendar.getInstance(); ec.set(2000, 1, 2, 3, 4, 5); assertEquals(ac, ec); assertCalendarYearIs(ac, 2000); }
Compositeデザパタを適用したりした、複雑なオブジェクトの場合は、上記のような技法で専用のassertionを用意する必要があるかもしれません。
あるいは、単に一致しているかどうかだけでなく、値が範囲内に収まっているかとか、Collectionに値が含まれているかなどドメインに特化したタイプのassertionの作成にも使えそうです。
assertionのカスタマイズとなりますと、JUnitの文化圏ではhamcrestとの組み合わせがメジャーな状況(2013/06現在)ですが、TestNGでは地雷を踏まない形でのhamcrestとのintegrationの例やドキュメントがなかなか見当たりません。決して「英語のようにスラスラ読める」訳ではありませんし、どちらかと言うと泥臭い技法になりますが、上記のようなカスタムassertionの作成は選択肢の一つに入れておいて損はないと思います。