Bonjour à tous.

Je tente de mettre en place des tests unitaires, mais j'ai des problèmes de dépendance. J'essaye donc d'utiliser Microsoft.Fakes pour simuler une référence mais je n'y comprend pas grand chose

La Dll dont je dépend en production ne peut etre utilisée pendant des tests.
Appellons là evil.dll

Elle est écrite en C++ ne fonctionne que si un programme est lancée.
Si un test tente de l'appeller, j'aurai un FileNotFoundException : evil.dll ou une de ses dépendances ne peut etre trouvée.

Voici donc un exemple que je cherche à modifier pour injecter des fakes.
Je ne vois pas comment me passer du type 'Script' le but étant de tester la classe 'Exemple'

Evil.dll
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public abstract class Script
{
   public event EventHandler okEvent;
}
Et mon code de prod
MaDll.dll
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
public class Maclasse : Evil.Script //Cette classe pose probleme dans mes tests à cause de la dépendance vers evil.dll
{
 
}
 
[assembly:InternalsVisibleTo("MesTest")] //Pour que mes tests puissent analyser _owner (voir ci dessous)
 
//La classe que je veux tester
public class Exemple
{
   Maclasse _owner; //Ce type dépend de evil.dll donc probleme
 
   public Exemple(Script owner)
   {
      if(owner == null)
         throw new ArgumentNullException();
         _owner = owner;
   }
}
Enfin mon test qui jete le FileNotFoundException à cause de evil.dll

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
[TestClass]
    public class ExempleTest
    {
 
      [TestMethod]
      public void Exemple_Constructor_ownerNotNull
      {
           MaClasse maisquefaire = new MaClasse();
           Exemple cible = new Exemple(maisquefaire);
           Assert.IsNotNull(cible._owner);
      }
    }
La où je bloque vraiment, c'est que le constructeur de Exemple attend un Script, et non un MockScript, alors je ne vois vraiment pas ce que je peux faire.

Une idée quelqu'un?