2016-02-16 2 views
2

У меня проблема с Fakes Framework и внутренним классом. Я только что прочитал и использовал совет здесь: How to mock/isolate internal classes in VS 2012 with Fakes Framework shims?Microsoft Fakes Framework - я не могу использовать внутренний класс

но, я до сих пор не вижу внутренних классов.

Я это решение: ACQTool (библиотека проекта класса) ACQTool.UnitTests (тест проекта)

в ACQTool пространстве имен есть ACQTool.Utils внутренний класс.

в ACQTool/AssemblyInfo.cs Я добавил эти строки:

[assembly: InternalsVisibleTo("ACQTool.UnitTests, PublicKey=57ad8399-13fd-4d4d-90fd-c521c2164d25")] 
[assembly: InternalsVisibleTo("ACQTool.Fakes, PublicKey=0024..47bc")] 
[assembly: InternalsVisibleTo("Microsoft.QualityTools.Testing.Fakes, PublicKey=0024..47bc")] 

После сборки, я могу использовать ACQTool.Utils в тестовом классе, но не существует ACQTool.Fakes.ShimUtils/StubUtils. Помогите мне пожалуйста.

+1

У вас есть '0024..47bc' или ** действительный ** открытый ключ? – Sinatr

+0

Да, я использовал отрезанный с MSDN-страницы, и я тоже пробовал свой plublickey, но без решения –

ответ

0

Возможно, вы должны вставить открытый ключ, сгенерированный инструментом sn.exe. Обычно он хранится где-то нравится:

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\sn.exe" 

вызова из командной строки:

sn.exe -p SomeName.snk SomeName.PublicKey 
sn.exe -tp SomeName.PublicKey 

и вставьте вывод в пары открытого ключа «InternalsVisibleTo».

Важное примечание от этой MSDN страницы, которые я пропустил: Рамки Подделки использует один и тот же ключ, чтобы подписать все сгенерированные сборки, так что открытый ключ, если подписание должно всегда быть PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92de‌​cb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977c‌​b98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daab‌​c862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb‌​687947bc

+0

Я выполнил эту процедуру, но результат не изменился. –

0

Это своего рода странно я просто реплицировать вашу проблему и, конечно же, он не генерировал внутренности в сборке Fake сначала. Я выполнил следующие шаги и начал работать даже для других пространств имен:

  • Добавить открытый класс под пространством имен Utils.
  • Восстановите проект тестирования, и внутреннее устройство начнет отображаться.
  • Удалите этот открытый класс и перестройте его снова.

Я удалил все из пространства имен Utils и добавил новый внутренний класс, и он отлично работает с тех пор. Это просто обходное решение для создания пространства имен, которое содержит внутренние элементы.

+0

Мое пространство имен - это «ACQTool». У меня есть класс «Utils.cs»: с внутренними классами Utils, public enum LogSeveriry, public class DisabledEvents, public static class ExExtensions. Я вижу все кассы, кроме Utils –