46 votes

Se moquer des méthodes statiques à l'aide de Rhino.Mocks

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?

71voto

Judah Himango Points 27365

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.

22voto

Rytmis Points 15848

Enveloppez l'appel de méthode statique dans une méthode d'instance virtuelle dans une autre classe, puis simulez-le.

17voto

Steve Guidi Points 8831

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.

4voto

Richard Banks Points 5650

Le seul framework fictif que je connaisse qui prenne en charge les statiques moqueuses est TypeMock.

Comme Rytmis l'a suggéré, vous devez envelopper la statique dans quelque chose (une classe d'instance avec des méthodes virtuelles ou une interface) que vous pouvez ensuite simuler.

4voto

Vaccano Points 18515

C'est le plus gros inconvénient de Rhino Mocks. Je ne sais pas s'il est même possible pour Rhino Mocks de le mettre en œuvre sans avoir à repenser sa façon de se moquer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X