C# - Исключая модульные тесты от версии выпуска Вашего проекта

Хотя использование !important редко является хорошей идеей, поскольку вы заметили себя, так как это боль, чтобы перезаписать без использования !importnat еще раз, я считаю, что у TB есть веская причина для этого для гибких утилит.

Если вы заявите, что хотите, т.е. кнопку, чтобы она не была видна, т.е. небольшие дисплеи, установив класс hidden-sm на эту кнопку, вы никогда не хотите, чтобы он был видимым на небольших дисплеях. Если вы не будете использовать важный для этого класса утилиты, и вы бы это сделали. хотите, чтобы кнопка блока на всех других размерах дисплея добавила класс .btn-block, ваша кнопка снова станет видимой на маленьких дисплеях, так как .btn-block возвращает свойство display обратно в block. Или, по крайней мере, это могло в зависимости от порядка вещей, поскольку .hidden-sm и .btn-block имеют одинаковую специфичность, когда дело доходит до каскадных правил css.

Ничто не может сделать с этим без !important. Таким образом, это один из крайних случаев, когда вам нужно будет использовать его, чтобы гарантировать правильное поведение.

Но вы правы в вопросе этого, !important следует использовать только в качестве последнего средства!

22
задан petr k. 12 August 2009 в 09:51
поделиться

13 ответов

Я определенно рекомендую выделять Ваши тесты к отдельному проекту. Это - единственный способ пойти, по-моему.

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

42
ответ дан Community 29 November 2019 в 03:22
поделиться

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

обратный аргумент: Почему Вы хотите вынуть тесты? Почему бы не поставить тест? При поставке тестов наряду с исполнителем тестов, у Вас есть некоторый уровень приемочного испытания и сам тест, поставленный с продуктом.

я услышал этот аргумент несколько раз и думал об этом, но я лично все еще сохраняю тесты в отдельном проекте.

0
ответ дан Hamish Smith 29 November 2019 в 03:22
поделиться

Я определенно соглашаюсь со всеми остальными, что необходимо разделить тесты от производственного кода. Если Вы настаиваете не, однако, необходимо определить условное выражение comiplation постоянный названный ТЕСТ и обернуть все классы модульного теста с

#if TEST
#endif

сначала, чтобы гарантировать, что тестовый код не компилирует в производственном сценарии. Как только это сделано, необходимо или быть в состоянии исключить тест dlls из производственного развертывания, или еще лучше (но более высокое обслуживание), создать NAnt или MSBuild для производства, которое компилирует без ссылок на тест dlls.

0
ответ дан Michael Meadows 29 November 2019 в 03:22
поделиться

Для каждого проекта существует соответствующий.Test проект, который содержит тесты на нем.

, Например, для названного блока, скажите "Высшую точку. BillingSystem. Utils", была бы опытная сборка, названная "Высшая точка. BillingSystem. Utils. Тест".

Исключают его из поставлющейся версии Вашего продукта, не поставляя это dll.

2
ответ дан Anthony 29 November 2019 в 03:22
поделиться

Пока Ваши тесты находятся в отдельном проекте, тесты могут сослаться на кодовую базу, но кодовая база никогда не должна ссылаться на тесты. Я должен спросить, что сбивает с толку о поддержании двух проектов? Можно сохранить их в том же решении для организации.

сложная часть, конечно, когда бизнес имеет 55 проектов в решении, и 60% из них являются тестами. Считайте себя удачливыми.

2
ответ дан tsilb 29 November 2019 в 03:22
поделиться

Я рекомендовал бы отдельный проект для модульных тестов (и все же больше проектов для интеграционных тестов, функциональные испытания и т.д.). Я попытался смешать код и тесты в том же проекте и нашел его намного менее удобным в сопровождении, чем разделение их в отдельные проекты.

пространства имен параллели Поддержания и использование разумного соглашения о присвоении имен для тестов (например, MyClass и MyClassTest) помогут Вам сохраняющий удобную в сопровождении кодовую базу.

3
ответ дан Rasmus Faber 29 November 2019 в 03:22
поделиться

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

1
ответ дан Chris Canal 29 November 2019 в 03:22
поделиться

Еще одна альтернатива использованию директив компилятора в файле или создании отдельного проекта должна просто создать дополнительные .cs файлы в Вашем проекте.

С некоторым волшебством в самом файле проекта, можно продиктовать что:

  1. на nunit.framework DLLs только ссылаются в отладочная сборка, и
  2. , Ваши тестовые файлы только включены в сборки отладки

Пример .csproj выборка:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

   ...

   <Reference Include="nunit.framework" Condition=" '$(Configuration)'=='Debug' ">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\debug\nunit.framework.dll</HintPath>
   </Reference>

   ...

   <Compile Include="Test\ClassTest.cs" Condition=" '$(Configuration)'=='Debug' " />

   ...
</Project>
8
ответ дан user21114 29 November 2019 в 03:22
поделиться

.Net платформа после v2 имеет полезную функцию, где можно отметить блок с атрибутом InternalsVisibleTo, который позволяет блоку быть полученным доступ другим.
Своего рода функция туннелирования блока.

10
ответ дан Rikalous 29 November 2019 в 03:22
поделиться

Как другие указывают, отдельный тестовый проект (для каждого нормального проекта) является хорошим способом сделать это. Я обычно зеркально отражаю пространства имен и создаю тестовый класс для каждого нормального класса с 'тестом', добавленным к имени. Это поддерживается непосредственно в IDE, если у Вас есть Система Команды Visual Studio, которая может автоматически генерировать тестовые классы и методы в другом проекте.

Одна вещь помнить, хотите ли Вы протестировать классы и методы с 'внутренним' средством доступа, состоит в том, чтобы добавить следующую строку к файлу AssemblyInfo.cs для каждого проекта, который будет протестирован:

[assembly: InternalsVisibleTo("UnitTestProjectName")]
20
ответ дан Morten Christiansen 29 November 2019 в 03:22
поделиться

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

2
ответ дан Niklas Winde 29 November 2019 в 03:22
поделиться

Одна вещь, которую еще нужно рассмотреть, - это то, что версии VisualStudio до 2005 года не позволяли ссылаться на проекты сборки EXE из других проектов. Поэтому, если вы работаете над унаследованным проектом в VS.NET, ваши варианты будут такими:

  • Поместите модульные тесты в тот же проект и используйте условную компиляцию, чтобы исключить их из сборок релиза.
  • Переместите все в сборки dll, чтобы ваш exe это всего лишь точка входа.
  • Обойдите IDE, взломав файл проекта в текстовом редакторе.

Из трех условных компиляций наименее подвержены ошибкам.

2
ответ дан 29 November 2019 в 03:22
поделиться

Если тег #if (DEBUG) допускает чистую «релизную» версию, зачем вам нужен отдельный проект для тестов. Пример nunit LibarryA / B (да, я знаю его пример) делает это. В настоящее время борюсь со сценарием. Использовал отдельный проект, но, похоже, это, возможно, позволит улучшить производительность. По-прежнему хуммин и хавин.

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

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