2011-03-15 3 views
8

J'ai une application qui fait référence à une DLL Microsoft (Exchange Web Services). Dans mes tests unitaires, je veux remplacer la DLL Microsoft avec un Mock.Mocking a Microsoft DLL

Ce qui fonctionne avec d'autres DLL, le travail ne marche pas avec cette DLL, comme je reçois une exception

La définition manifeste de l'assembly situé ne correspond pas à la référence d'assemblage

je l'ai vérifié a le même version d'assemblage, mais j'ai vu que la DLL Microsoft est signée numériquement, donc il a un PublicKeyToken. Cela pourrait-il être ce que ma demande recherche? Une DLL signée de la même manière?

Existe-t-il un moyen de référencer une DLL sans nécessiter sa clé publique?

Merci

+1

Que diriez-vous: msvcr71d.dll est si moche que même rundll32.exe dit qu'il a une mauvaise image !!! Droite? Droite? Je suis tellement désolé ... – diceguyd30

Répondre

13

Vous ne pouvez pas simuler une DLL signée. (Si vous pouviez être embauché par mafia ...)

Moquez le code qui accède au code dans cette DLL.

Créez une façade (si vous ne l'avez pas), qui encapsule l'accès aux méthodes dans Exchange dll. Ensuite, dans vos tests, vous pouvez fournir une fausse façade.

Il est recommandé de protéger votre code contre tout code tiers (assemblages, services Web, contrôle) par le biais de façades/wrappers. Cela minimise le risque d'impact si le code d'un tiers change, c.-à-d. mise à niveau vers une version plus récente de dll (les changements requis affecteront seulement la façade) et aider avec les tests.

+5

+1 pour écrire une façade autour de la DLL –

+0

Vous pouvez vous moquer des dll système avec une certaine supercherie, par exemple PEX fait cela. –

+0

@remco - Parlez-vous de http://research.microsoft.com/en-us/projects/moles/? –