Est-il possible de se moquer d'une méthode statique à l'aide de Rhino.Mocks? Si Rhino ne le supporte pas, existe-t-il un schéma ou quelque chose qui me permettrait d'accomplir la même chose?
Réponses
Trop de publicités?Est-il possible de simuler une méthode statique à l'aide de Rhino.On se moque de
Non, il n'est pas possible.
TypeMock peut le faire, car il utilise le CLR profiler pour intercepter et de rediriger les appels.
RhinoMocks, NMock, et Moq ne peut pas le faire parce que ces bibliothèques sont plus simples; ils n'utilisent pas le CLR profiler Api. Ils sont plus simples en ce qu'ils utilisent des proxys pour intercepter les membres virtuels et les appels d'interface. L'inconvénient de cette simplicité, c'est qu'ils ne peuvent pas se moquer de certaines choses, telles que des méthodes statiques, des propriétés statiques classes scellées ou non virtuelle des méthodes d'instance.
Si vous ne pouvez pas utiliser TypeMock pour intercepter l'appel de la méthode, le modèle recommandé d'utiliser est de créer un proxy qui redirige vers la non-virtuelle ou méthodes statiques vous êtes intéressé dans les essais, puis définir les attentes sur le proxy. Pour illustrer, considérons les classes suivantes.
class TypeToTest
{
public void Method() { }
}
interface ITypeToTest
{
void Method();
}
class TypeToTestProxy : ITypeToTest
{
TypeToTest m_type = new TypeToTest();
public void Method() { m_type.Method(); }
}
Par la création de ce formulaire de procuration, vous pouvez maintenant utiliser un ITypeToTest
à la place de l'endroit où vous étiez de passage ou l'établissement d'un TypeToTest
exemple, s'assurer que l'implémentation par défaut utilise l' TypeToTestProxy
qu'il transmet à la mise en œuvre réelle. Ensuite, vous pouvez créer une maquette ITypeToTest
dans votre code de test et de définir les attentes en conséquence.
Notez que la création de ces procurations peuvent être très fastidieux, source d'erreurs, et beaucoup de temps. Pour répondre à ce que je maintiens, une bibliothèque et un ensemble d'outils qui génèrent des assemblages contenant ces types de vous. Veuillez vous référer à cette page pour plus d'informations.