2016-08-24 1 views
1

J'utilise NUnit avec FakeIteasyproblème avec fakeiteasy tout en jetant exception

Mon test Méthode:

[Test] 
    public async Task SiteDetailsView_NMSException() 
    { 

     url = "/Svc/v1/Sites/GetNextID?UID=" + orgUID; 
     A.CallTo(() => fake.GetDataAsync<int>(fakeHttpSession, url)).Throws(new Exception(new Uri(url), 
         new ExceptionDetail() 
          { 
           ErrorCode=ExceptionErrorCode.ParameterOutOfRange 
           Description="param OrganizationUID" 
          })); 
     // Act 
     var actionResult = await myController.DetailsView(UID, oName, oUID, isReadOnly); 
     var viewResult = actionResult as ViewResult; 
      // Assert 
     Assert.IsNotNull(actionResult); 
    } 

My controller Code: 



    public async Task<ActionResult> DetailsView(int sUID, string oName, int oUID, bool isReadOnly) 
    { 


      try 
      { 
       SModel siModel = new SModel(); 


       siModel .dite.Id = await _client.GetDataAsync<int>(Session, "/ManagementSvc/v1/ites/GetID?oUID=" + orgUID); 

      } 
      catch (Exception ex) 
      { 
       return View("Error", _plExceptionHandler.HandleException(ex)); 
      } 
     } 
    } 

Je reçois erreur

System.Uri.Format Exception : the format of URI cannot be determined.' at 
    A.CallTo(() => fake.GetDataAsync<int>(fakeHttpSession, url)).Throws(new SException(new Uri(url), new ExceptionDetail() { ErrorCode=ExceptionErrorCode.ParameterOutOfRange,Description="param OUID"})); 

Est-il possible d'ignorer la première (Uri) paramètre et jeter l'exception. Je ne peux pas passer nulle aussi bien pour le premier paramètre

ici est ma classe d'exception:

public class NException : Exception 
{ 
    private readonly NExceptionDetail m_ExceptionDetails; 

    private readonly Uri m_requestUri; 

    public NException(Uri requestUri, nExceptionDetail nExceptionDetails) 

    { 
     if (requestUri == null) 
      throw new ArgumentNullException("requestUri"); 

     m_requestUri = requestUri; 

    } 
} 

Comment lancer NException en utilisant FakeItEasy.

Je veux faire des assertions pour les messages d'erreur.

Comment puis-je faire une assertion.

Répondre

1

Vous obtenez le UriFormatException parce que votre variable d'origine url n'est pas un URI valide. C'est pourquoi

.Throws(new NMSException(new Uri(url), 
        new NMSExceptionDetail() 
         { 
          ErrorCode=ExceptionErrorCode.ParameterOutOfRange 
          Description="param OrganizationUID" 
         })); 

jette. Vous pouvez voir la même chose, même sans FakeItEasy:

var url = "/NMS/Platform/UserManagementSvc/v1/Sites/GetNextSiteID?organizationUID=" + 0; 
new Uri(url); 

Pour répondre à quelques-unes des autres questions que vous groupés ici, vous pouvez ignorer la première URL comme ceci:

A.CallTo(() => nmsFake.GetNMSPlatformDataAsync<int>(fakeHttpSession, A<string>.Ignored)) 

comme on le voit dans Ignoring Arguments en les docs FakeItEasy.

(Soit dit en passant, vous devriez vous débarrasser d'un de vos A.CallTo s. Je pense que vous venez de mettre le second pendant que vous essayez des choses, donc peut-être vous sortez de votre code à la fin . pendant que je suis sur le sujet, je vous encourage à nettoyer votre exemple de code, ce qui en fait la plus petite et ciblée que possible tout en reproduisant toujours le problème Cela a deux avantages:.

  1. quand les choses deviennent plus simples, vous pouvez voir la réponse vous-même, et
  2. il est plus facile pour nous de comprendre votre code et répondre à votre q uestions)
+0

Merci pour l'aide d'ignorer parameter.How puis-je venir sur l'autre problème concernant lancer la classe d'exception personnalisée (NMSException) –

+0

Puisque vous obtenez une erreur d'analyse Uri, vous pouvez arrêter l'analyse syntaxique 'url 'string (ce qui voudrait dire que vous auriez besoin d'un constructeur' NMSExceptionDetail' qui a pris autre chose qu'un 'Uri'), ou construire une chaîne URI valide dans la variable' url'. –

+0

Merci pour les suggestions, laissez-moi savoir s'il existe un moyen d'ignorer ce paramètre url pour URI. Becoz tous mes scénarios d'exception doivent être couverts de cela. –