2017-04-17 10 views
0

を期待し、ユニットテストは、例外Javaのユニットテストの例外は、私が問題を抱えている

public class MainActivityTest { 
    NumberPicker warmUpSeconds; 
    NumberPicker warmUpMinutes; 
    NumberPicker restSeconds; 
    NumberPicker restMinutes; 
    NumberPicker coolDownSeconds; 
    NumberPicker coolDownMinutes; 
    NumberPicker workMinutes; 
    NumberPicker workSeconds; 
    NumberPicker rounds; 
    @Test(expected = WrongTimeSetEx.class) 
    public void testButtonOnClick() throws WrongTimeSetEx { 
     MainActivity tested=mock(MainActivity.class); 
     warmUpSeconds=mock(NumberPicker.class); 
     warmUpMinutes=mock(NumberPicker.class); 
     restSeconds=mock(NumberPicker.class); 
     restMinutes=mock(NumberPicker.class); 
     coolDownMinutes=mock(NumberPicker.class); 
     coolDownSeconds=mock(NumberPicker.class); 
     workMinutes=mock(NumberPicker.class); 
     workSeconds=mock(NumberPicker.class); 
     rounds=mock(NumberPicker.class); 
     when(warmUpSeconds.getValue()).thenReturn(0); 
     when(warmUpMinutes.getValue()).thenReturn(0); 
     when(restMinutes.getValue()).thenReturn(0); 
     when(restSeconds.getValue()).thenReturn(0); 
     when(coolDownSeconds.getValue()).thenReturn(10); 
     when(coolDownMinutes.getValue()).thenReturn(15); 
     when(workMinutes.getValue()).thenReturn(10); 
     when(workSeconds.getValue()).thenReturn(10); 
     when(rounds.getValue()).thenReturn(0); 
     tested.setTimes(); 
    } 
} 

をスローする必要がありますし、

public void setTimes() throws WrongTimeSetEx 
    { 
     warmUpTime = warmUpSeconds.getValue(); 
     warmUpTime += 60 * warmUpMinutes.getValue(); 
     restTime = restSeconds.getValue(); 
     restTime += 60 * restMinutes.getValue(); 
     coolDownTime = coolDownSeconds.getValue(); 
     coolDownTime += 60 * coolDownMinutes.getValue(); 
     workTime = workSeconds.getValue(); 
     workTime += 60 * workMinutes.getValue(); 
     roundsNumber = rounds.getValue(); 
     String communicate=""; 
     if(restTime==0) //check if times are correct and make sense 
      communicate+="No time set for Rest Time!<br>\n"; 
     if(workTime==0) 
      communicate+="No time set for Work Time!<br>\n"; 
     if(roundsNumber==0) 
      communicate+="No rounds number is set!<br>\n"; 
     if(!communicate.isEmpty()) 
      throw new WrongTimeSetEx(communicate); 

    } 

warmUpTimesと「タイムズ」の残りの部分はパッケージプライベートでテストした方法がありますテスト中に発生するエラーは、次のとおりです。

java.lang.AssertionError: Expected exception: jablonskijakub.intervaltraining.exceptions.WrongTimeSetEx 

    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:32) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 


Process finished with exit code -1 

私は単体テストに精通していません。それらを私は多くの例を見つけることができません。悪いコードを事前に申し訳ありません。

@edit入力していないsetTimes関数 @ edit2解決済み、私は自分のモックが意味をなさないと考えています。私はそれらを関数に渡すことさえできません(関数自体はパラメータを取得しません)。私はsetTimesの定義を変更し、整数で分と秒を得るようにしました。テストでは、パラメータとして0しか渡しませんでした。それは働いて、例外がスローされました。

+0

デバッガでコードをステップ実行する必要があります。 –

+0

@OliverCharlesworth Charlesworthさて、この関数を入力していないので、今チェックしました –

答えて

0

解決私も関数に渡していないので、私は、私のモックはどんな意味がありませんはず(関数自体にはパラメータがありません)、setTimesの定義を変更し、分と秒を得るようにしましたintのecondsとテストでは、パラメータとして0しか渡しませんでした。それは働いて、例外がスローされました。

0

restTimeは0あなたのコードに応じて&テストが順番にあなたのrestTimeを行い、ゼロ、ゼロ&を返すためにrestMinutes & restSecondsを皮肉っているときに例外を投げているとWrongTimeSetEx(通信)の通信時間がないセット「+ =を伝えていない」であるスロー「休憩時間のためだから、正常に動作する必要があり、あなたのテスト&で次の変更を行います。 - 。

when(restMinutes.getValue()).thenReturn(10); 
when(restSeconds.getValue()).thenReturn(15); 
when(rounds.getValue()).thenReturn(10); 
+0

しかし、この例外が発生することを期待しています、それはこのテストのポイントです(少なくとも私はその意図を持っていました) –

関連する問題