2010-08-12 3 views
1

J'ai une question qui peut sembler stupide et simple, mais j'ai à peine une idée de la façon de procéder.simple question comment afficher le message d'exception

Ma question est:

Comment puis-je modifier le message d'exception et personnaliser telle que j'ai toujours mon passage de tests unitaires?

En fait, je veux personnaliser le message d'exception à "étudiant" Johny "avait des fichiers connexes!" et comme modifié le message d'exception de l'API, le test de l'unité échoue.

Johny est une variable qui peut changer ...

Toute aide que je peux obtenir ce qui précède. Merci


Dans ma classe de test, je vais avoir

 [ExpectedException(ExceptionType = typeof(Exception), ExpectedMessage = "The DELETE statement conflicted with the REFERENCE constraint \"FK_Issue_Priority\"")] 

En fait, je suis en utilisant NHibernate et dans mon API je gestion des exceptions comme suit:

catch (NHibernate.ADOException exception) 
     { 
      if (exception.InnerException.GetType().Equals(typeof(System.Data.SqlClient.SqlException))) 
      { 
       if (exception.InnerException.Message.Contains("FK_Issue_Priority")) 
       { 
        throw new Exception("The DELETE statement conflicted with the REFERENCE constraint \"FK_Issue_Priority\""); 
       } 
       else 
       { 
        throw new Exception("A database error occurred while trying to add the customer to project relation please the see inner exception for details", exception.InnerException); 
       } 
      } 
      else 
      { 
       throw exception; 
      } 
     } 

Répondre

2

Je ne improbabilité le contenu exact des messages d'exception dans mon unité teste exactement pour cette raison - ils ont tendance à être variable.

Au lieu de cela vous avez deux options:

  1. Dérive une nouvelle classe basée expressément Exception pour lancer dans cette méthode (par exemple une classe « RelatedFilesExistedException »). Les tests unitaires peuvent simplement vérifier que le type d'exception correct est renvoyé sans avoir à se soucier de correspondre exactement au texte du message.

  2. Ne faites correspondre que partiellement le message d'exception (pour lequel vous devrez écrire votre propre code de test et ne pas répondre à l'attribut ExpectedException).

+0

Merci de répondre. Puis-je avoir un exemple comment faire cela? – learning

+1

Dans Visual Studio, créez un nouveau fichier de classe et supprimez la définition de classe. Utilisez ensuite l'extrait "Exception" pour créer une nouvelle classe d'exception (tapez "Exception", puis cliquez sur TAB pour déclencher l'extrait), puis renommez la classe en "RelatedFilesExistException". Dans votre code, lancez une nouvelle occurrence de RelatedFilesExistException au lieu de lancer une nouvelle exception. Dans votre test unitaire, utilisez [ExpectedException (ExceptionType = typeof (RelatedFilesExistException)] –

0
  1. Créer différentes classes d'exception pour différentes choses comme le Dr Herbie suggèrent.
  2. Je n'utiliserais pas d'exceptions pour le flux de contrôle normal. Il y a d'autres constructions de langage pour cela, comme si-sinon. Les exceptions sont pour un comportement exceptionnel.
  3. Je ne permettrais pas à un utilisateur de cliquer sur un bouton qu'il n'est pas autorisé à cliquer. L'affichage d'un message au lieu d'un bouton peut être plus convivial.