Странная проблема модульного тестирования внутренних классов с VS 2008 - PullRequest
1 голос
/ 22 февраля 2009

Я начинаю проект, который разбит на несколько проектов VS, и я планировал иметь отдельные проекты тестирования для каждого из проектов, поэтому у меня было бы решение, подобное этому:

  • Project1
  • Project1.Test
  • Проект2
  • Project2.Test

Есть несколько internal классов, которые я хочу протестировать. Поэтому я использовал Visual Studio 2008 (SP1) для создания тестовых заглушек в моем тестовом проекте и добавил InternalsVisibleTo. Но я получаю красную волнистую линию под внутренним классом. Если я скомпилирую, то получу успешную сборку, и, глядя на метод испытания, красные загогулины исчезли.

Но если я проверю файл, вернутся загогулины, и у меня не будет смысла во внутреннем классе.

internal находится в Project1, а тест - в Project1.Test. Для полноты я решил сделать точно такой же способ генерации тестового метода, но на этот раз в Project2.Test, и на этот раз он работает полностью. Я не получаю красные загогулины, я получаю intellisense, все.

Я пытался удалить Project1.Test и воссоздать тестовый метод, все, что я могу придумать, но независимо от того, что я делаю, я не могу сделать внутреннее полностью видимым в его парном тесте проект, только в том, который предназначен для другого проекта.

Это делает мой орех, что это не работает!

Ответы [ 3 ]

2 голосов
/ 01 марта 2009

Не могли бы вы использовать строковую константу или что-то кроме точного литерала (без конкатенации) в атрибуте InternalsVisibleTo? У нас была привычка использовать строковую константу для ее определения, и это прекрасно работает для всего, кроме intellisense. Замените вставкой в ​​виде простой строки, и она работает.

Также может помочь удаление файла .suo (в той же папке, что и файл решения).

1 голос
/ 22 февраля 2009

Я тоже это видел, особенно при использовании строгих имен. Если честно, я не волновался; Пока он компилируется и тестируется правильно, я могу жить со странным сбоем. Например, если вы столкнулись с проблемой one build, я видел, что он жалуется, что не может найти другие (внутренние) методы - но чистая сборка не показывает ошибок. Опять же, меня это не беспокоит ... (может, я слишком прощаю?).

В частности, только редко мне нужно использовать внутренний тип / член в тестах (большую часть времени я буду пытаться тестировать через публичный API); таким образом, отсутствие 100% -ного надежного интеллекта обычно не является большой проблемой. Я уже знаю тип / члена, который я ищу (копировать / вставить ;-p).

Конечно, было бы неплохо, если бы это было исправлено, но если бы я был менеджером по бюджету, я бы, вероятно, смирился с этим и сосредоточился бы сначала на других функциях.

0 голосов
/ 22 февраля 2009

Это может быть проблема с файлом IntelliSense DB. Попробуйте удалить его, и VS попытается восстановить БД.

Для этого закройте решение и удалите (все?) .Ncb файлы. Чтобы быть в безопасности, просто переименуйте их в нечто вроде .nc4 или что-то еще. Повторно откройте решение и восстановите его. Дайте мне знать, если это работает.

РЕДАКТИРОВАТЬ: Очевидно, файлы ncb только для проектов C ++. Я не знаю, где находится база данных IntelliSense для проектов C #, и не могу выяснить. На вашем месте я все равно попытался бы найти способ сброса БД.

Асаф

...