2010-11-03 9 views
2

Est-ce que cela peut être fait? Voici la méthode que je teste:Comment puis-je tester une méthode contenant une méthode statique?

public void SaveAvatarToFileSystem() 
{ 
    Directory.CreateDirectory(AvatarDirectory); 
    _file.SaveAs(FormattedFileName); 
} 

Dans mon test unitaire, j'utilise Rhino.Mocks et je veux vérifier que _file.SaveAs() a été appelée. Je me suis moqué de _file (qui est un objet HttpPostedFileBase) et l'ai injecté dans le constructeur de classe de cette méthode. Je veux exécuter ce test unitaire, mais l'appel à Directory.CreateDirectory n'est pas réellement effectué. Est-ce possible?

+5

duplication possible de [Méthodes de simulation statique utilisant Rhino.Mocks] (http://stackoverflow.com/questions/540239/mocking-static-methods-using-rhino-mocks) –

Répondre

2

Il n'est pas possible de simuler une méthode statique à l'aide de Rhino Mocks. Ce que je ferais est d'isoler la méthode statique dans la méthode "protected internal virtual" dans la classe. Ensuite, ce que vous pouvez faire est de se moquer de la "classe sous test" et se moquer de la méthode "CreateAvatarDirectory". Appelez ensuite la méthode "SaveAvatarToFileSystem" et vérifiez que le code a appelé votre méthode "CreateAvatarDirectory".

C'est une astuce très pratique qui vous permet d'isoler les méthodes de votre classe testée et d'affirmer qu'elles ont été appelées par d'autres méthodes de la même classe. J'espère que cela pourra aider!

public void SaveAvatarToFileSystem() 
{ 
    CreateAvatarDirectory(); 
    _file.SaveAs(FormattedFileName); 
} 

protected internal virtual void CreateAvatarDirectory() 
{ 
    Directory.CreateDirectory(AvatarDirectory); 
} 
0

Vous pouvez écrire ou utiliser une enveloppe existante pour la classe statique (dans le cas ci-dessus peut-être System.IO.Abstractions aidera).