### Question:
MissionControlSupport implements MissionStubSupport { public OngoingMissionRun start(Mission mission, Map<String, Object> missionParameters) { Mono<MissionHandle> handle = mole.instantiate(mission, missionParameters); handle.subscribe(h -> mole.instructRoot(h, StrandCommand.RESUME)); return new OngoingMissionRun(mole, handle); } private  MissionControlSupport(Mole mole); static MissionControlSupport from(Mole mole); OngoingMissionRun start(Mission mission, Map<String, Object> missionParameters); OngoingMissionRun start(String missionName, Map<String, Object> missionParameters); OngoingMissionRun control(Mono<MissionHandle> handle); OngoingMissionRun control(MissionHandle handle); @Override OngoingMissionRun start(VoidStub0 stub); @Override OngoingReturningMissionRun<R> start(MissionStub0<R> stub); OngoingMissionRun start(VoidStub1<P1> stub, P1 p1); @Override OngoingReturningMissionRun<R> start(MissionStub1<P1, R> stub, P1 p1); OngoingMissionRun start(VoidStub2<P1, P2> stub, P1 p1, P2 p2); @Override OngoingReturningMissionRun<R> start(MissionStub2<P1, P2, R> stub, P1 p1, P2 p2);  }### Answer:
@Test public void start() { OngoingMissionRun run; assertThat((run = support.start(voidMission1, new HashMap<String, Object>() {{ put("stringParam", "name"); }})), instanceOf(OngoingMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); assertThat((run = support.start(new Mission(voidMission2), new HashMap<String, Object>() {{ put("stringParam", "name"); put("doubleParam", 1.5); }})), instanceOf(OngoingMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); VoidStub0 voidStub0 = MissionStubs.stub(voidMission0); assertThat((run = support.start(voidStub0)), instanceOf(OngoingMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); VoidStub1 voidStub1 = MissionStubs.stub(voidMission1).withParameters(aString("stringParam")); assertThat((run = support.start(voidStub1, "string parameter")), instanceOf(OngoingMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); VoidStub2 voidStub2 = MissionStubs.stub(voidMission2).withParameters(aString("stringParam"), aDouble("doubleParam")); assertThat((run = support.start(voidStub2, "string parameter", 1.5)), instanceOf(OngoingMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); MissionStub0<Boolean> missionStub0 = MissionStubs.stub(booleanMission0).returning(Boolean.class); assertThat((run = support.start(missionStub0)), instanceOf(OngoingReturningMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); MissionStub1<String, Integer> missionStub1 = MissionStubs.stub(integerMission1).returning(Integer.class) .withParameters(aString("stringParam")); assertThat((run = support.start(missionStub1, "string parameter")), instanceOf(OngoingReturningMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); MissionStub2<String, Double, Double> missionStub2 = MissionStubs.stub(doubleMission2).returning(Double.class) .withParameters(aString("stringParam"), aDouble("doubleParam")); assertThat((run = support.start(missionStub2, "string parameter", 0.1)), instanceOf(OngoingReturningMissionRun.class)); assertThat(run.awaitHandle(), instanceOf(MissionHandle.class)); }