2016-08-15 7 views
1

メソッドが何もしないかどうかをテストする方法を教えてください。たとえば、私は、指定された文字列引数がnullまたは空の場合(それは引数の検証のためのものです)、例外をスローする静的メソッドを持っています。今、私のテストでは、次のようになります。JUnit4 - メソッドが何もしないかどうかをテストします。

@Test 
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() { 
    Require.notNullOrEmpty(Generate.randomString()); 
    assertTrue(true); // <- this looks very ugly 
} 

@Test(expected = IllegalArgumentException.class) 
public void notNullOrEmpty_throwsExceptionIfValueIsNull() { 
    Require.notNullOrEmpty(null); 
} 

@Test(expected = IllegalArgumentException.class) 
public void notNullOrEmpty_throwsExceptionIfValueIsEmpty() { 
    Require.notNullOrEmpty(""); 
} 

私はassertTrue(true)を呼び出すことなく通過する最初のテストをすることができ、Assert.fail()があるどのようにAssert.pass()のようなものはありますか?

EDIT: はあなたが@Test(expected = YourException.class)注釈を追加する必要があり、第3の試験に

+0

本当にただグアバライブラリPreconditions.checkArgument(Strings.isNullOrEmpty(「のmyString」))から十分にテストクラスを使用することを検討してnullまたは空かどうかを確認ありません。 – sandrozbinden

+0

ランダムに生成された文字列をテスト入力として慎重に使用することも忘れないでください。 http://stackoverflow.com/questions/3441686/what-are-the-downsides-using-random-values-in-unit-testing – sandrozbinden

答えて

5

最初の方法でアサートを削除するだけです。

@Test 
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() { 
    Require.notNullOrEmpty(Generate.randomString()); 
    // Test has passed 
} 

テストメソッドが完全に実行される場合は、成功したことを意味します。 EclipseのJUnitの出力を見てください:

enter image description here

アップデートを:あなたはMockitoフレームワークを使用する場合、追加のコメントとして、あなたは方法はX回呼び出されたことを確認するためにverify方法を活用することができます。あなたは、静的メソッドをテストしていることから、その後、あなたは(Mockitoにはないので)あなたは、静的メソッドを確認することができます便利な使用してPowerMockを見つけるかもしれない、あなたのケースでは

verify(cmAlertDao, times(5)).save(any(CMAlert.class)); 

:たとえば、私はこのようなものを使用しました。また、verifyStatic(...)を使用できます。

+0

、何もアサートしないだけでテストに合格するでしょうか? – danielspaniol

+0

@Exhauztはい、正しい。私は答えに更新を加えました。しかし、Mockitoフレームワークを 'verify'で使うことができます。メソッドはX量と呼ばれます。また、PowerMockを使用して、呼び出されている静的メソッドを検証することもできます。 –

+0

@Exhauzt、JUnitのみを使用している場合は、何もアサートしていない場合はテストに合格します。 –

3

を逃す(expected = IllegalArgumentException.class)を追加しました。

は、最初のテストに追加してください:

@Test 
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() { 
    String str = Generate.randomString(); 
    Require.notNullOrEmpty(str); 
    assertNotNull(str); 
} 

、おそらくあなたは、あなたが空でない値のためにそれをテストしているのでnotNullOrEmpty_doesNothingIfValueIsNotNullOrNotEmptyに名前を変更した方が良い持っています。

+0

私はこれを持っています...例外がスローされるべきテストです。しかし、私は最初のテストをより明確にしたいです – danielspaniol

0

単体テストは、メソッドの動作に予想されるものをアサートする必要があります。
あなたの仕様で、あなたのコールがnotNullOrEmpty()の場合、データが有効であり、データが有効でないときに例外がスローされなければならない例外がスローされなければならない場合、単体テストでは、それは成功しません、例外がスローされ、テストは失敗になります。必須クラスの場合

@Test 
public void notNullOrEmpty_doesNothingIfValueIsNotNullOrEmpty() { 
    Require.notNullOrEmpty(Generate.randomString()); 
} 
関連する問題