383 votes

Comment puis-je faire valoir mon message d'exception avec JUNIT Test d'annotation?

J'ai écrit quelques tests avec JUnit @Test d'annotation. Si ma méthode d'essai jette un checked exception et si je veux affirmer le message en même temps que l'exception, il est un moyen de le faire avec JUnit @Test d'annotation? Autant que je sache, JUnit 4.7 ne pas fournir cette fonctionnalité, mais n'toutes les futures versions? Je sais que dans .NET, vous pouvez faire valoir le message et la classe exception. La recherche d'une fonction similaire dans le monde Java.

C'est ce que je veux:

@Test (expected = RuntimeException.class, message = "Employee ID is null")
public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() {}

579voto

Jesse Merriman Points 936

Vous pouvez utiliser le @Règle d'annotation avec ExpectedException, comme ceci:

@Rule
public ExpectedException expectedEx = ExpectedException.none();

@Test
public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() {
    expectedEx.expect(RuntimeException.class);
    expectedEx.expectMessage("Employee ID is null");
    // do something that should throw the exception...
}

Notez que l'exemple de la ExpectedException docs est (pour l'instant) de mal - il n'y a pas de constructeur public, donc vous devez utiliser ExpectedException.none (aucun).

38voto

c_maker Points 2957

Avez-vous d'utiliser @Test(expected=SomeException.class)? Lorsque nous avons à faire valoir le véritable message de l'exception, c'est ce que nous faisons.

@Test
public void myTestMethod()
{
  try
  {
    final Integer employeeId = null;
    new Employee(employeeId);
    fail("Should have thrown SomeException but did not!");
  }
  catch( final SomeException e )
  {
    final String msg = "Employee ID is null";
    assertEquals(msg, e.getMessage());
  }
}

2voto

Jyothi Points 1

Si vous utilisez @la Règle, l'exception prévue est appliquée à toutes les méthodes de test dans le Test de la classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X