Bonsoir,
Au niveau du contexte, je souhaite tester une classe imbriquee qui utilise un delegate pour des operations mathematiques (add, sub, mul...).
La classe Nested est imbriquee et en protected car elle n'a pas d'utilite a l'exterieur de MyDelegate. Idem pour le delegate en protected, qui depend de la visibilite de la classe Nested.
Au niveau du test unitaire:
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 public class MyDelegate { protected class Nested { protected delegate float MyOpDelegate (Nested x, Nested y); // Champs et Constructeurs... public static float Add (Nested x, Nested y) { // des calculs... } protected float Calculate (MyOpDelegate op) { // code... } } }
La compilation du code passe nickel, mais en revanche le code du test unitaire plante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 float res = 0; MyDelegate_Accessor.Nested nested = new MyDelegate_Accessor.Nested (42f); res = nested.Calculate (MyDelegate_Accessor.Nested.Add); Assert.AreEqual (res, 51f);
Le compilateur parle de groupe de methodes, mais ici, Add n'est pas surchargee.erreur CS1502: La méthode surchargée correspondant le mieux à 'DelegateDummy.MyDelegate_Accessor.Nested.Calculate(DelegateDummy.MyDelegate_Accessor.Nested.MyOpDelegate)' possède des arguments non valides
erreur CS1503: Argument '1'*: impossible de convertir de 'groupe de méthodes' en 'DelegateDummy.MyDelegate_Accessor.Nested.MyOpDelegate'
Lorsque je passe tout en public (classe Nested et delegate), le compilateur est gentil et le code du test compile normalement (mais si possible, j'aimerais eviter de tout mettre en public, comme je l'ai enonce plus haut).
Auriez-vous une explication a cela, et comment je peux resoudre mon probleme ?
Autre question: Lorsque je veux creer un test unitaire pour la methode Calculate, Visual Studio ne me propose pas ce choix dans l'assistant... Pourquoi ?
Merci
Partager