Невоздушные методы испытаний в JUnit 4 - PullRequest
3 голосов
/ 12 октября 2010

Я бы хотел, чтобы тестовый класс JUnit 4 реализовывал тот же интерфейс, что и класс, который он тестирует. Таким образом, по мере изменения интерфейса (и мы будем на ранней стадии разработки), компилятор гарантирует, что соответствующие методы будут добавлены в тестовый класс. Например:

public interface Service {
  public String getFoo();
  public String getBar();
}

public class ServiceImpl implements Service {
  @Override public String getFoo() { return "FOO"; }
  @Override public String getBar() { return "BAR"; }
}

public class ServiceTest implements Service {
  @Override
  @Test
  public String getFoo() {
    //test stuff
  }

  @Override
  @Test
  public String getBar() {
    //test stuff
  }
}

Когда я пытаюсь это сделать, я получаю сообщение об ошибке: «java.lang.Exception: метод getFoo () должен быть void», предположительно потому что методы испытаний должны возвращать void. Кто-нибудь знает как-нибудь обойти это?

Ответы [ 2 ]

7 голосов
/ 12 октября 2010

Должен признать, что это хитрый трюк, хотя он плохо масштабируется для нескольких тестовых сценариев.

В любом случае, вы можете использовать собственный раннер.Например:

@RunWith(CustomRunner.class)
public class AppTest {

  @Test
  public int testApp() {
    return 0;
  }
}

public class CustomRunner extends JUnit4ClassRunner {

  public CustomRunner(Class<?> klass) throws InitializationError {
    super(klass);
  }

  protected void validate() throws InitializationError {
    // ignore
  }
}
1 голос
/ 12 октября 2010

Более естественным способом, вероятно, было бы использование инструмента покрытия кода, такого как Cobertura .Он прекрасно интегрируется с JUnit и показывает вам случаи, когда ваши тесты могут быть неэффективными в некоторых случаях (хотя во многих случаях такой инструмент не будет обнаружен).

...