C# 如何使visual studio 2017项目在仍然引用NUnit的情况下不成为测试项目
我有一个带有unittest助手类的库。我在这个项目中引用了NUnit,但现在VisualStudio认为这个项目是一个测试项目,并抱怨没有发现任何测试。此项目不是一个测试项目,只是一个引用NUnit的常规.net标准库 我想“说服”VisualStudio,这不是一个测试项目。 有什么想法吗 技术细节:该项目是一个.Net标准2.0项目,我参考了以下NuGet软件包:C# 如何使visual studio 2017项目在仍然引用NUnit的情况下不成为测试项目,c#,visual-studio-2017,nunit,vs-unit-testing-framework,C#,Visual Studio 2017,Nunit,Vs Unit Testing Framework,我有一个带有unittest助手类的库。我在这个项目中引用了NUnit,但现在VisualStudio认为这个项目是一个测试项目,并抱怨没有发现任何测试。此项目不是一个测试项目,只是一个引用NUnit的常规.net标准库 我想“说服”VisualStudio,这不是一个测试项目。 有什么想法吗 技术细节:该项目是一个.Net标准2.0项目,我参考了以下NuGet软件包: 最小起订量4.10.0 Moq.AutoMock 1.2.0.111 NUnit 3.10.1 我使用Visual Stu
- 最小起订量4.10.0
- Moq.AutoMock 1.2.0.111
- NUnit 3.10.1
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
[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)
如果在程序集级别应用
NonTestAssemblyAttribute
,这将告诉NUnit它不是测试程序集。但是,在Visual Studio下运行时,您必须查看这是否可以防止出现错误。在.csproj文件中,您应该能够添加以下内容:
<PropertyGroup>
<IsTestProject>false<IsTestProject>
</PropertyGroup>
假的
对于引用XUnit的库来说,这对我来说是有效的,而XUnit不是测试库,它也应该对NUnit有效。是否检查了项目文件中是否有以下条目:
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
{3AC096D0-A1C2-E12C-1390-A8335801FDB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
它将项目定义为测试项目(旧式)
另请参见此处:您的解决方案中有两个项目?该解决方案还有几个其他项目,其中一些确实是测试项目。您需要提供更多信息。你想创建一个测试项目还是其他什么?不,我不想创建一个测试项目。这应该是引用NUnit的常规.net标准2.0库。它不包含任何测试,但被测试项目引用(该项目称为“UnittestHelpers”)。我编辑了带有附加说明的帖子。这没有更改项目图标,也没有阻止测试输出中出现异常。csproj文件中没有entru这没有更改项目图标,它也没有阻止测试输出中的异常。