2016-09-19 1 views
0

Je peux écrire des boîtes de test d'unités en utilisant NUnit et Fake it Easy pour les contrôleurs MVC4. Dans l'un des contrôleurs, je devrais être dérangé.est un moyen d'imiter la classe Uri

 ExceptionDetail exception = new ExceptionDetail() { Description = "Test", ErrorCode = ExceptionErrorCode.UserIsDisabled }; 
    Exception ex = new Exception(new Uri("http://localhost//Plat/ManagementSvc/Groups?UserID=" + iD "), exception); 

    A.CallTo(() => Fake.GetDataAsync<IEnumerable<Group>>(fakeHttpSession, url)).Throws(ex); 

Ma question est au lieu de passer localhost (nouveau Uri (« http://localhost//Plat/ManagementSvc/Groups »), est-il un moyen de simuler l'URL pour URI

+0

Vous n'exécutez aucun comportement sur l'Uri, et un Uri ne dépend d'aucun service extérieur Ou n'importe quoi. Pourquoi voulez-vous vraiment faire semblant? Vous pouvez remplacer le texte Uri réel par quoi que ce soit d'autre si vous n'aimez pas localhost (en aparté, vous devriez avoir seulement un '/' après "localhost", et vous avez un '' 'supplémentaire après le' iD' dans votre exemple de code) Quel est exactement votre objectif? Qu'est-ce qui ne fonctionne pas pour vous? –

Répondre

0

Si le problème est que l'exception n'est pas levée lorsque votre code de production appelle GetDataAsync, il se peut que votre code passe dans un Uri différent Si c'est le cas, vous pouvez changer quel Uri déclenche cet appel en utilisant une forme différente de argument constraint

exactement, vous pouvez choisir de faire correspondre Uri:

A.CallTo(() => Fake.GetDataAsync<IEnumerable<Group>>(fakeHttpSession, A<Uri>.Ignored)) 
    .Throws(ex); 

Ou vous pourriez même être plus précis:

A.CallTo(() => Fake.GetDataAsync<IEnumerable<Group>>(fakeHttpSession, A<Uri>.That.Matches(uri => uri.AbsolutePath == "/Plat/ManagementSvc/Groups")) 
    .Throws(ex); 

si c'est ce qui est nécessaire. Il y a beaucoup d'options. Consultez la documentation.

Notez qu'il n'y a pas simulant d'un Uri ici. Vous dites juste à FakeItEasy quels tests appliquer à un Uri reçu afin de décider si la méthode falsifiée GetDataAsync devrait lancer