2008-11-18 4 views
0

J'ai un problème avec mock partiel en utilisant Rhino Mocks:attentes sur partielle Mock - Exception NullReference

var authentication = (FormsAuthenticationService)_mocks.PartialMock(
    typeof(FormsAuthenticationService)); 
Expect.Call(delegate{ authentication.SetAuthCookie(null, null); }).IgnoreArguments(); 

..et je reçois NullReferenceException sur "Attendez-vous." ligne ..

Je vais simplement ajouter que FormsAuthenticationService implémente IAuthentication

Répondre

1

Y at-il une bonne raison que vous essayez de se moquer de la classe physique, plutôt que de l'interface? Je demande cela parce qu'il ya 2 problèmes potentiels avec FormsAuthenticationService moqueur:

  1. La classe ne peut pas avoir un constructeur par défaut parameterless (dans lequel cas, vous devez spécifier une méthode surchargée de mocks.PartialMock) .

  2. Le SetAuthCookie doit être virtuel. Les cadres de simulation ne peuvent généralement que simuler des classes non scellées et uniquement les membres virtuels d'une telle classe.

Pour contourner ces problèmes, je vous recommande de se moquer de IAuthentication à la place. Les interfaces de simulation n'ont pas ces limitations. Voici le code que vous écririez:

var authentication = _mocks.DynamicMock<IAuthentication>(); 
Expect.Call(() => authentication.SetAuthCookie(null, null)).IgnoreArguments(); 
Questions connexes