2016-10-28 1 views
0

j'ai une interface, ILoader, sur lequel j'ai défini une méthode d'extension CheckLoaderDatabaseConnection:Microsoft Fakes - Stubbing une méthode d'extension ne devrait pas fonctionner mais il ne

//the extension method 
    public static class LoaderExtensions 
    { 
    public static void CheckLoaderDatabaseConnection(this ILoader loader) 
    { 
     //data access stuff 

    } 

Toutes CETTE DOCUMENTATION là-bas me dit que j'ai utiliser des shims quand je veux boucher une méthode d'extension parce que la méthode est statique et ne peut pas être stubbed. Il est vrai que cela ne fonctionne pas dans Moq parce que je l'ai essayé.

Mais je peut stub l'interface Fakes:

var loader = new MyNamespace.Fakes.StubILoader() { }; 

Dans mon test unitaire, je passe dans le talon au constructeur de l'instance concrète que je teste et quand il arrive à cette ligne :

loader.CheckLoaderDatabaseConnection(); 

Il appelle la méthode bouchonné (qui ne fait rien) et fonctionne bien.

Pourquoi est-ce? J'ai dû louper quelque chose. Je n'ai pas du tout utilisé de shims ici (bien que je ne puisse pas l'utiliser dans Moq - quand j'essaye ça, l'extension du monde réel s'appelle &) tout le monde explose

+1

Comment avez-vous bousillé la méthode d'extension? De votre exemple, la méthode d'extension est simplement exécutée contre la fausse implémentation de l'interface, qui est autorisée. Vous devrez peut-être fournir plus de code source pour le fonctionnement de la méthode d'extension – Nkosi

Répondre

0

Non, la méthode d'extension wasn Je ne suis pas invoqué, mais après le redémarrage d'un écran bleu de la mort plus tôt, la méthode d'extension est maintenant invoquée et le test unitaire échoue comme je m'y attendais.

Je ne comprends pas comment cela a fonctionné pendant plusieurs jours cependant; quelque chose de bizarre & Je ne pense pas que cette question puisse être résolue.