Как получить доступ к классам в другом блоке в целях поблочного тестирования?

@Eric, я оказываюсь перед необходимостью соглашаться с Деканом. Потоки являются дорогими. Вы не можете предположить, что Ваша программа является единственным выполнением. Когда все являются жадными с ресурсами, проблема умножается.

я предпочитаю создавать свои потоки вручную и управлять ими сам. Это сохраняет код очень легким понять.

Это прекрасно, когда это является соответствующим. При необходимости в наборе рабочих потоков, тем не менее, все, что Вы сделали, делают Ваш код более сложным. Теперь необходимо записать код для управления ими. Если бы Вы просто использовали пул потоков, Вы получили бы все управление потоком бесплатно. И пул потоков, обеспеченный языком, очень вероятно, будет более устойчивым, более эффективным, и меньше багги, чем, что Вы прокручиваете для себя.

Thread t = new Thread(new ThreadStart(DoSomething));  
t.Start();  
t.Join();  

я надеюсь, что у Вас обычно был бы некоторый дополнительный код промежуточным Start() и Join(). Иначе дополнительный поток бесполезен, и Вы тратите впустую ресурсы ни по какой причине.

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

миллисекунда А длинна время на современных аппаратных средствах. Это - 3 миллиона циклов на машине на 3 ГГц. И снова, Вы не единственный, создающий потоки. Ваши потоки конкурируют за ЦП наряду с потоками любой программы. Если Вы используете потоки not-quite-too-many, и также - другая программа, то вместе Вы использовали слишком много потоков.

Серьезно, не делайте жизнь более сложной, чем это должно быть. Не используйте пул потоков, если Вам не нужно что-то очень определенное, которое он предлагает.

Действительно. Не делайте жизнь более сложной. Если для Вашей программы нужны несколько рабочих потоков, не перестраивайте колесо. Используйте пул потоков. Вот почему это там. Строковый класс самокрутки?

21
задан Kevin Montrose 31 July 2009 в 09:59
поделиться

4 ответа

Для этого можно использовать атрибут уровня сборки InternalsVisibleToAttribute .

Добавьте

[assembly:InternalsVisibleTo("MyProjectTests")]

в AssemblyInfo.cs сборки MyProject.

35
ответ дан 29 November 2019 в 20:25
поделиться

Вы можете протестировать внутренние методы, добавив атрибут в AssemblyInfo.cs для вашего основного проекта, предоставив доступ к внутренним методам для именованной сборки:

[сборка: InternalsVisibleTo ("MyProjectTestsNameSpace.MyProjectTests")]

Дополнительная информация здесь

3
ответ дан 29 November 2019 в 20:25
поделиться

Вам необходимо добавить

[assembly:InternalsVisibleTo("Unit.Tests.Assembly")] 

в AssemblyInfo.cs вашего «MyProject (C #)». Это позволит вашим тестам получить доступ к внутренним методам тестирования.

3
ответ дан 29 November 2019 в 20:25
поделиться

Похоже, вам нужен ] InternalsVisibleToAttribute

Однако я бы не рекомендовал этот подход - протестируйте свои внутренние классы через открытый интерфейс или API.

1
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: