Как я могу сделать мой проект Visual Studio 2017 НЕ тестовым, все еще ссылаясь на NUnit

У меня есть библиотека с вспомогательными классами unittest. Я ссылаюсь на NUnit в этом проекте, но теперь Visual Studio считает, что этот проект является тестовым, и жалуется, что никаких тестов не обнаружено. Этот проект не предназначен для тестирования, это просто обычная стандартная библиотека .net, которая ссылается на NUnit.

Я хочу «убедить» визуальную студию, что это НЕ тестовый проект. Любые идеи?

Технические детали: это проект .Net Standard 2.0, и я ссылаюсь на следующие пакеты NuGet:

  • Moq 4.10.0
  • Moq.AutoMock 1.2.0.111
  • NUnit 3.10.1

Я использую Visual Studio 2017 Enterprise версии 15.8.4

Пример того, для чего предназначена эта библиотека:

  public abstract class AutoMockerTestBase
  {
     protected AutoMocker AutoMocker { get; private set; }

     [SetUp]
     public virtual void SetUp()
     {
        AutoMocker = new AutoMocker(MockBehavior.Strict);
     }

     [TearDown]
     public virtual void TearDown()
     {
        AutoMocker.VerifyAll();
     }
  }

Чтобы воспроизвести проблему:

  • Добавьте в решение проект библиотеки классов .net standard2.0.
  • Ссылка NUnit

Теперь обратите внимание, что визуальная студия меняет значок проекта на тестовый проект.

Помогите мне найти способ, чтобы визуальная студия НЕ считала этот проект тестовым, и убедитесь, что vs не пытается найти тесты в этом проекте.

РЕДАКТИРОВАТЬ: Просматривая вывод «Тесты», я обнаружил следующее:

[16/09/2018 10:12:55 Warning] Exception NUnit.Engine.NUnitEngineException, Exception thrown discovering tests in C:\Users\me\Source\Repos\Shared\src\UnitTestHelpers\bin\Debug\netstandard2.0\Shared.UnitTestHelpers.dll
[16/09/2018 10:12:55 Warning] An exception occurred in the driver while loading tests.
[16/09/2018 10:12:55 Warning]    at NUnit.Engine.Runners.DirectTestRunner.LoadDriver(IFrameworkDriver driver, String testFile, TestPackage subPackage)
   at NUnit.Engine.Runners.DirectTestRunner.LoadPackage()
   at NUnit.Engine.Runners.TestDomainRunner.LoadPackage()
   at NUnit.Engine.Runners.DirectTestRunner.EnsurePackageIsLoaded()
   at NUnit.Engine.Runners.DirectTestRunner.Explore(TestFilter filter)
   at NUnit.Engine.Runners.MasterTestRunner.Explore(TestFilter filter)
   at NUnit.VisualStudio.TestAdapter.NUnit3TestDiscoverer.DiscoverTests(IEnumerable`1 sources, IDiscoveryContext discoveryContext, IMessageLogger messageLogger, ITestCaseDiscoverySink discoverySink) in D:\repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\NUnit3TestDiscoverer.cs:line 90
[16/09/2018 10:12:55 Warning] Innerexception: System.IO.FileNotFoundException: Could not load file or assembly 'nunit.framework' or one of its dependencies. The system cannot find the file specified.
File name: 'nunit.framework'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Activator.CreateInstance(String assemblyString, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo)
   at System.AppDomain.CreateInstance(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.CreateObject(String typeName, Object[] args)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
   at NUnit.Engine.Runners.DirectTestRunner.LoadDriver(IFrameworkDriver driver, String testFile, TestPackage subPackage)

person Michiel Dulfer    schedule 15.09.2018    source источник
comment
У вас 2 проекта в вашем решении?   -  person Llazar    schedule 15.09.2018
comment
У решения есть еще несколько проектов, некоторые из них действительно тестовые.   -  person Michiel Dulfer    schedule 15.09.2018
comment
Вам необходимо предоставить дополнительную информацию. Вы хотели создать тестовый проект или что-то еще?   -  person Llazar    schedule 15.09.2018
comment
Нет, я НЕ хочу создавать тестовый проект. Это должна быть обычная стандартная библиотека .net 2.0, которая может ссылаться на NUnit. Он не содержит тестов, но на него ссылаются тестовые проекты (проект называется UnittestHelpers)   -  person Michiel Dulfer    schedule 15.09.2018
comment
Я отредактировал пост с добавлением уточнения   -  person Michiel Dulfer    schedule 15.09.2018
comment
Вам нужно проверить, есть ли у вас циклическая ссылка между проектами в ваших решениях.   -  person Llazar    schedule 15.09.2018
comment
Я проверил. Этот проект ссылается только на проекты, не относящиеся к модульному тестированию, и на него ссылаются только проекты модульного тестирования. Проект строится нормально, и все работает, но в обозревателе решений отображается значок проекта unittest, и когда я запускаю модульные тесты в решении, я вижу предупреждения о том, что в проекте UnittestHelper не обнаружено никаких тестов. Я хочу, чтобы VS перестала рассматривать этот проект как тестовый, потому что это не так.   -  person Michiel Dulfer    schedule 15.09.2018
comment
Добавить ссылку на тестовый адаптер NUnit 3 с помощью NuGet   -  person Nisfan    schedule 15.09.2018
comment
@Nisfan Я хочу прямо противоположное. Этот проект НЕ является проектом unittest. Добавление ссылки на тестовый адаптер только сделает его БОЛЬШЕ похожим на тестовый проект;)   -  person Michiel Dulfer    schedule 15.09.2018
comment
Ты не можешь. Visual Studio просто проверила список ссылок, чтобы узнать, есть ли там nunit.framework. Привыкай к этому.   -  person Lex Li    schedule 15.09.2018
comment
Это очень ... неудовлетворительно :( Я добавлю пока фиктивный тест, чтобы VS не жаловался ...   -  person Michiel Dulfer    schedule 15.09.2018
comment
Я думаю, что есть свойство <IsTestProject> (PropertyGroup), которое вы можете добавить / установить в false в ваших файлах csproj. По крайней мере, кажется, что это случай из чтения некоторых проблем с github, связанных с различными тестовыми пакетами. Возможно, это поможет   -  person pinkfloydx33    schedule 15.09.2018
comment
<IsTestProject> исправил исключение. Спасибо! Однако Visual Studio по-прежнему использует значок TestProject. Это просто визуально, поэтому я просто проигнорирую это;) Если вы опубликуете свое предложение в качестве ответа, я могу отметить его как таковое!   -  person Michiel Dulfer    schedule 16.09.2018
comment
Я сдаюсь! После очистки и восстановления ошибка вернулась :(   -  person Michiel Dulfer    schedule 16.09.2018


Ответы (3)


Внутри файла .csproj вы сможете добавить следующее:

<PropertyGroup>
  <IsTestProject>false<IsTestProject>
</PropertyGroup>

Это сработало для меня с библиотеками, ссылающимися на XUnit, которые не являются тестовыми библиотеками, и это должно работать и для NUnit.

person humbleice    schedule 29.05.2020
comment
Это не изменило значок проекта и не предотвратило исключение в тестовых выходных данных. - person Michiel Dulfer; 09.11.2020

Если вы примените NonTestAssemblyAttribute на уровне сборки, это скажет NUnit, что это не тестовая сборка. Однако вам нужно будет посмотреть, предотвращает ли это ошибку при работе в Visual Studio.

person Charlie    schedule 15.09.2018
comment
Это не изменило значок проекта и не предотвратило исключение в тестовых выходных данных. - person Michiel Dulfer; 09.11.2020

Вы проверили, есть ли у вас в файле проекта следующая запись:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Он определяет проект как тестовый (старый стиль).

См. Также здесь: Как преобразовать из существующей сборки в сборку модульного теста ms?

person Mathias Rotter    schedule 05.11.2020
comment
В файле csproj отсутствует ‹ProjectTypeGuids› Entru - person Michiel Dulfer; 09.11.2020