/**
  * @param ExerciseInterface $exercise
  * @return ExerciseInterface
  */
 private function validateExercise(ExerciseInterface $exercise)
 {
     $type = $exercise->getType();
     $requiredInterface = $type->getExerciseInterface();
     if (!$exercise instanceof $requiredInterface) {
         throw InvalidArgumentException::missingImplements($exercise, $requiredInterface);
     }
     return $exercise;
 }
 public function testExceptionFromMissingImplements()
 {
     $e = InvalidArgumentException::missingImplements(new \stdClass(), Countable::class);
     self::assertEquals('"stdClass" is required to implement "Countable", but it does not', $e->getMessage());
 }