を期待し、ユニットテストは、例外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しか渡しませんでした。それは働いて、例外がスローされました。
デバッガでコードをステップ実行する必要があります。 –
@OliverCharlesworth Charlesworthさて、この関数を入力していないので、今チェックしました –