[Unity Test Tools][UnitTest] 例外の発生するテストをする

ヨメレバCSS
オリジナルCSS

例外が発生するケースをテストする場合には、 ExpectedException属性を使用します。

例えばこのような、例外が発生するメソッドがあったとして、

public void ThrowExceptionSample() {
	throw new System.Exception ();
}

そのままそれをテストしただけだと、当然例外で失敗します。

[Test]
public void ThrowExceptionSampleTest() {
	Sample s = new Sample ();
	s.ThrowExceptionSample ();
}

結果

UnityTesttools_1_9_exception

ですが、この例外が発生することが正しい、エラーケースをテストする場合には、この例外を拾わないといけません。

そのときにはExpectedExceptionを指定します。

[Test]
[ExpectedException(typeof(System.Exception))]
public void ThrowExceptionSampleTest() {
	Sample s = new Sample ();
	s.ThrowExceptionSample ();
}

テストのほうに、ExceptedExceptionをつけてやると、例外が発生することでテストが通るようになります。

UnityTestTools_1_9_exception2

例外は、typeofの他に文字列でも指定できます。

[ExpectedException("System.Exception")]

エラーメッセージの内容までチェックしたい場合は、ExpectedMessageを指定します。

[ExpectedException("System.Exception", ExpectedMessage="test")]

とすると、System.Exceptionが投げられただけでなく、メッセージもチェックします。

UnityTestTools_1_9_message

実行した結果、メッセージが一致していないのでエラーになります。

これはデフォルトでは完全一致になりますが、MatchTypeの指定により判定を変えることができます。

MatchType 判定
Exact 完全一致
Contains 部分一致
Regex 正規表現一致
[ExpectedException("System.Exception", ExpectedMessage="type", MatchType=MessageMatch.Contains)]

というように指定します。

例外が発生した、だけでなくもっと複雑な判定処理をしたい場合は、処理するハンドラを登録します。

public void ThrowExceptionSampleHandlerMethod(System.Exception e) {
	Debug.Log ("handler method");
}

というメソッドを用意して、

[ExpectedException(typeof(System.Exception), Handler="ThrowExceptionSampleHandlerMethod")]

とした場合、例外が発生するとThrowExceptionSampleHandlerMethodが呼ばれます。

この中で、Assertを使用してテスト結果の判定を行います。何もしなければ成功します。

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)