MS Test & private accessors: получить доступ к закрытому вложенному классу

Я использую MS Test в сочетании с частными аксессуарами для тестирования моих классов. Я использую частные помощники (недоступно в VS 2012 :-() для вызова моих личных методов. Это работает отлично.

Но я не могу получить доступ к закрытым вложенным классам!

Например:

public class Tool
{
  private IList DoSomePreparation(object anything)
  {
   //do some preparations here
  }

  private class Result { }
}

С помощью частного доступа можно получить доступ к моему приватному методу

{
  var accessor = new Tool_Accessor(new PrivateObject(new Tool()));
  accessor.DoSomePreparation(new object());
}

Но как я могу получить доступ к вложенному классу? Мне нужно это, так как я хотел бы высмеять результат, полученный от DoSomePreparation (...).

1
nl ja de
Какой метод DoSomePreparation действительно делает? Потому что, когда это какая-то подготовка, например. Инициализация свойств - его можно использовать из синтаксиса инициализатора свойства вне класса. Или когда он читает что-то из XML, логика чтения может быть отделена от класса. Вот несколько сочетаний ответственности. Такая логика может быть реализована за ее пределами, а затем ее публичный контракт также может быть проверен.
добавлено автор Regfor, источник

2 ответы

Tool_Accessor.Result - будет вашим аксессуаром для вложенного класса.

1
добавлено

Наиболее распространенный способ в таких случаях - проверить публичный контракт класса и избежать тестирования рядовых, поскольку он делает тесты более уязвимыми к изменениям в реальной реализации. Попытайтесь разработать свой API, чтобы не тестировать частные методы. Когда тестирование частных методов необходимо, тогда в таких случаях классы могут нарушать принцип единой ответственности.

В качестве примера, сериализация XML. Когда сериализация xml выполняется внутри класса, представляющего бизнес-объект домена, особенно с наследованием, когда существует иерархия между объектами домена. В таком случае было бы сложно протестировать такой объект домена с реализацией сериализации xml внутри. Но при реализации сериализации xml за пределами объекта домена, чем и объект домена, и объект с логикой сериализации xml могут быть легко протестированы с использованием публичного контракта.

Иногда бывает трудно избежать тестирования частных методов. В контексте .NET вы можете сделать такие методы доступными как внутренние, и получить доступ к ним из тестов, используя InternalsVisibleTo .

1
добавлено
В общем, я согласен, но, как вы говорите, в некоторых случаях вам нужно проверить частные методы.
добавлено автор llasarov, источник
QA — вакансии и аналитика рынка вакансий
QA — вакансии и аналитика рынка вакансий
5 668 участник(ов)

Вакансии и поиск работы в сфере QA. Вопросы: @qa_ru Про деньги: @qa_fin При размещении вакансии указывать: - должность - компанию - требования к кандидату - условия и ЗП хэштеги: #город #типзанятости

QA — русскоговорящее сообщество
QA — русскоговорящее сообщество
3 625 участник(ов)

Общаемся про все виды тестирования и его автоматизацию. Без мата, грубостей и провокаций. События: @qaevents Вакансии: @qa_jobs Автоматизаторы: @qa_automation Слухи про компании: @qa_bad_company

QA juniors
QA juniors
2 720 участник(ов)

Добро пожаловать в чат джуниоров QA! Общаемся обо всём, что связано с тестированием и не только :) В чате царит дружественная атмосфера, поэтому общаемся без мата, грубостей. @qa_automation - автоматизация @serious_tester - для тестировщиков и QA

QA - Bad Company!
QA - Bad Company!
2 602 участник(ов)

Позитив и негатив про компании или курсы, куда не стоит идти работать или учиться, а куда стоит. За пиратский контент - бан. @qa_fin о деньгах Русскоговорящее сообщество: @qa_ru Флудилка: @qaFlood Вакансии: @qa_jobs Финансы: @qa_fin

QA — Автоматизация
QA — Автоматизация
2 434 участник(ов)

1. Обсуждение технологий автоматизированного тестирования 2. Помощь начинающим Ru-сообщество: @qa_ru Джуночат: @qajuniors Вакансии: @qa_jobs Финансы: @qa_fin Митапы и события: @qaevents Паблики: @serious_tester, @automation_remarks, @atinfo

QA - Finance
QA - Finance
1 347 участник(ов)

Чат о деньгах тестировщиков. ЗП, релокейты,оферы. @qa_bad_company - обсуждение компаний/курсов и карьерного роста для QA @qa_automation - авто QA Холивары, политика, религия-бан Реклама, спам, оскорбления - бан Для флуда используйте другой чат