2009-02-22 5 views
1

Je commence un projet qui est divisé en plusieurs projets VS et je prévoyais avoir des projets de tests séparés pour chacun des projets, donc j'aurais une solution comme celle-ci :Unité à problèmes impairs testant les classes internes avec VS 2008

  • Projet1
  • Project1.Test
  • Projet2
  • Project2.Test

Il y a quelques internal classes que je veux avoir testé. J'ai donc utilisé Visual Studio 2008 (SP1) pour générer les talons de test dans mon projet de test et ajouté le InternalsVisibleTo. Mais je reçois une ligne rouge ondulée sous la classe interne. Si je compile, j'ai une construction réussie, et en regardant la méthode de test, les gribouillis rouges ont disparu. Mais si je durcis le fichier, les gribouillis reviennent et je n'ai aucun intellisense sur la classe interne. Le internal est dans Project1 et le test est dans Project1.Test. Pour être complet, j'ai décidé de faire exactement la même manière de générer la méthode de test mais cette fois-ci dans Project2.Test, et cette fois, il est montré que ça fonctionne complètement. Je ne reçois pas de gribouillis rouges, je reçois de l'intellisense, tout.

J'ai essayé de supprimer Project1.Test et de recréer la méthode de test, tout ce que je peux penser, mais peu importe ce que je fais, je ne peux pas obtenir l'interne complètement visible dans son projet de test apparié, seulement dans celui qui est conçu être pour un autre projet.

Ça fait ma noix que ça ne marche pas!

+0

Est-ce VS2008 SP1? –

+0

Oui, mis à jour le poste pour montrer que –

+0

est-ce que vous avez installé resharper? ou tout autre addin qui peut altérer la coloration syntaxique? – Simon

Répondre

0

Il peut s'agir d'un problème avec le fichier DB IntelliSense. Essayez de le supprimer et demandez à VS de reconstruire la base de données. Pour cela, fermez la solution et supprimez (tous?) Les fichiers .ncb. Pour être du bon côté, il suffit de les renommer en quelque chose comme .nc4 ou autre. Rouvrez la solution et reconstruisez-la. Laissez-moi savoir si cela fonctionne.

EDIT: Apparemment, les fichiers ncb sont uniquement destinés aux projets C++. Je ne sais pas où est la base de données IntelliSense pour les projets C#, je ne pouvais pas le savoir. Si j'étais vous, j'essayerais toujours de trouver un moyen de réinitialiser la base de données.

Asaf

+0

Pour C#, intellisense pour foo.dll se trouve dans le fichier foo.xml généré si activé; Toutefois, les références de projet dans une solution ne l'utilisent pas - elles peuvent accéder directement aux métadonnées. –

1

Je l'ai vu aussi, en particulier lors de l'utilisation des noms forts. Pour être honnête, je ne suis pas excité; Tant qu'il compile et teste correctement, je peux vivre avec le pépin impair. Par exemple, si vous obtenez un problème de construction, je l'ai vu se plaindre qu'il ne peut pas trouver les autres méthodes (internes) - mais une construction propre ne montre aucune erreur. Encore une fois, je ne suis pas dérangé par ça ... (peut-être que je pardonne trop?).

En particulier, c'est seulement rarement que j'ai besoin d'utiliser un type/membre interne dans les tests (la plupart du temps je vais essayer de tester via l'API publique); donc le manque d'intellisense fiable à 100% n'est généralement pas un gros problème. Je connais déjà le type/membre que je cherche (copier/coller ;-p).Bien sûr, ce serait bien si elle était corrigée, mais si j'étais le gestionnaire de budget, je pourrais probablement vivre avec et se concentrer sur d'autres fonctionnalités en premier.

+0

Ouais ce n'est pas un gros problème, mais c'est ennuyeux quand vous manquez-tapez un membre cuz intellisense est mort! –

2

Pourriez-vous utiliser une constante de chaîne ou autre chose que l'agitation littérale exacte (sans concaténation) dans votre attribut InternalsVisibleTo? Nous avions l'habitude d'utiliser une constante de chaîne pour la définir, et cela fonctionne bien pour tout sauf intellisense. Remplacer en collant comme une simple chaîne et cela fonctionne. La suppression de votre fichier .suo (même dossier que votre fichier de solution) peut également s'avérer utile.

+0

en utilisant une chaîne exacte l'a résolu pour moi. –

Questions connexes