Nunit-console - .csproj 文件中的预期内容是什么?
Nunit-console - what is expected in .csproj file?
我目前正在用 C# 做一些测试(使用 Mono 和 NUnit,全部在 OS X 上,但它应该稍后在 Travis 上 运行)。我没有安装 Visual studio 并设法得到一个 "working" .csproj 文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Compile">
<Target Name="Compile">
<Csc Sources="@(Compile)" References="@(Reference)" TargetType="Library" />
</Target>
<Target Name="Test" DependsOnTargets="Compile">
<Exec Command="nunit-console nunit.csproj" />
</Target>
<ItemGroup>
<Reference Include="nunit.framework.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="../csharp/class/CoffeeMachine.cs" />
<Compile Include="tests/Actionwords.cs" />
<Compile Include="tests/ProjectTest.cs" />
</ItemGroup>
</Project>
编译工作正常但我无法执行测试,出现以下错误:
╰─$ nunit-console nunit.csproj
NUnit version 2.4.8
Copyright (C) 2002-2007 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Unix 14.3.0.0
CLR Version: 4.0.30319.17020 ( 4.2.0 (Stable 4.2.0.179/a224653 Tue Oct 6 11:27:49 PDT 2015) )
Unhandled Exception:
System.ArgumentException: Invalid project file format: nunit.csproj ---> System.NullReferenceException: Object reference not set to an instance of an object
at NUnit.Util.VSProject.LoadMSBuildProject (System.String projectDirectory, System.Xml.XmlDocument doc) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 257
at NUnit.Util.VSProject.LoadProject (System.String projectDirectory, System.Xml.XmlDocument doc) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 210
at NUnit.Util.VSProject.Load () in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 184
--- End of inner exception stack trace ---
at NUnit.Util.VSProject.ThrowInvalidFormat (System.String projectPath, System.Exception e) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 307
at NUnit.Util.VSProject.Load () in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 197
at NUnit.Util.VSProject..ctor (System.String projectPath) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 56
at NUnit.Util.NUnitProject.FromVSProject (System.String vsProjectPath) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/NUnitProject.cs:line 234
at NUnit.Util.NUnitProject.LoadProject (System.String path) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/NUnitProject.cs:line 161
at NUnit.ConsoleRunner.ConsoleUi.MakeRunnerFromCommandLine (NUnit.ConsoleRunner.ConsoleOptions options) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ConsoleRunner/nunit-console/ConsoleUi.cs:line 214
at NUnit.ConsoleRunner.ConsoleUi.Execute (NUnit.ConsoleRunner.ConsoleOptions options) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ConsoleRunner/nunit-console/ConsoleUi.cs:line 58
at NUnit.ConsoleRunner.Runner.Main (System.String[] args) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ConsoleRunner/nunit-console/Runner.cs:line 63
注意:如果我执行 nunit-console hiptest.publisher.samples.dll
它就像一个魅力。
我的猜测是 NUnit 期望 .csproj 文件告诉测试目标是什么。我尝试在 PropertyGroup 下添加 AssemblyName 组,但没有任何区别。
最大的问题是我找不到任何关于 Nunit 对 .csproj 内容的期望的文档(我主要是找到所有通过 VS 或使用 MSBuild 社区任务完成的示例,这听起来非常好但显然不适合我的环境(Mono,OS X 和一个与 Mono 发布的不同的 NUnit 包(不是在那个项目上,在另一个使用 Specflow 的项目上,但如果我能为这个修复它应该为第二个修复))。
提前致谢,
文森特
当 NUnit 控制台 2.4.x 和 3.x 与 .csproj
文件一起使用时,它需要一个有效且相当完整的 MSBuild/xbuild 项目来确定程序集名称、目录它将在基于库的项目中测试的位置和命名空间(如果您定义了正确的入口点,基于 Exe 的项目是可能的)。在此示例中,我使用了 NUnit 2.4.x 和 3.x console,因为存在执行差异,但使用的是相同的 .csproj
,因此如果您使用 MonoDevelop/Xamarin Studio IDE 的内置 NUnit 2.4.x 测试板也可以工作。此外,我会 假设 你也会使用 Mono 的 xbuild
在 Travis 上构建你的项目,因此需要一个完整的 .csproj
。
NUnit 3.0 控制台(通过 nuget 安装):
mono $(MTOOLS)/nunit3-console.exe nunit-lib/nunit-lib.csproj --config=Debug
NUnit Console Runner 3.0.5797
Copyright (C) 2015 Charlie Poole
Runtime Environment
OS Version: MacOSX 15.0.0.0
CLR Version: 4.0.30319.17020
Test Files
nunit-lib/nunit-lib.csproj
Errors and Failures
1) Failed : nunitlib.Test.TestCase
Expected string length 8 but was 5. Strings differ at index 0.
Expected: "Overflow"
But was: "Stack"
-----------^
at nunitlib.Test.TestCase () in <filename unknown>:line 0
Test Run Summary
Overall result: Failed
Tests run: 1, Passed: 0, Errors: 0, Failures: 1, Inconclusive: 0
Not run: 0, Invalid: 0, Ignored: 0, Explicit: 0, Skipped: 0
Start time: 2015-11-20 12:36:28Z
End time: 2015-11-20 12:36:28Z
Duration: 0.132 seconds
NUnit 2.4.8(通过 Mono 安装):
注意:NUnit 控制台 2.4.x 是 broken
由于在解析 .csproj
文件并创建预期的 CIL/assembly 位置,使用 MONO_IOMAP
解决它。这在 3.0 中不是问题。
NUnit 控制台 2.4.x w/o MONO_IOMAP:
nunit-console nunit-lib/nunit-lib.csproj -config=Debug
~~~~
Unhandled Exception:
System.IO.DirectoryNotFoundException: Directory "/Users/sushi/code/XamTests/nunit-lib/nunit-lib/bin\Debug" not found.
~~~~
NUnit 控制台 2.4.x 与 MONO_IOMAP:
MONO_IOMAP=all nunit-console nunit-lib/nunit-lib.csproj -config=Debug
NUnit version 2.4.8
Copyright (C) 2002-2007 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Unix 15.0.0.0
CLR Version: 4.0.30319.17020 ( 4.2.1 (explicit/8862921 Thu Oct 29 17:09:16 EDT 2015) )
.F
Tests run: 1, Failures: 1, Not run: 0, Time: 0.115 seconds
Test Case Failures:
1) nunitlib.Test.TestCase : Expected string length 8 but was 5. Strings differ at index 0.
Expected: "Overflow"
But was: "Stack"
-----------^
.csproj例子用在例如:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{944946CD-39B2-4A16-A8A8-9F70F0450506}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>nunitlib</RootNamespace>
<AssemblyName>nunit-lib</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Test.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
</Project>
我目前正在用 C# 做一些测试(使用 Mono 和 NUnit,全部在 OS X 上,但它应该稍后在 Travis 上 运行)。我没有安装 Visual studio 并设法得到一个 "working" .csproj 文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Compile">
<Target Name="Compile">
<Csc Sources="@(Compile)" References="@(Reference)" TargetType="Library" />
</Target>
<Target Name="Test" DependsOnTargets="Compile">
<Exec Command="nunit-console nunit.csproj" />
</Target>
<ItemGroup>
<Reference Include="nunit.framework.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="../csharp/class/CoffeeMachine.cs" />
<Compile Include="tests/Actionwords.cs" />
<Compile Include="tests/ProjectTest.cs" />
</ItemGroup>
</Project>
编译工作正常但我无法执行测试,出现以下错误:
╰─$ nunit-console nunit.csproj
NUnit version 2.4.8
Copyright (C) 2002-2007 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Unix 14.3.0.0
CLR Version: 4.0.30319.17020 ( 4.2.0 (Stable 4.2.0.179/a224653 Tue Oct 6 11:27:49 PDT 2015) )
Unhandled Exception:
System.ArgumentException: Invalid project file format: nunit.csproj ---> System.NullReferenceException: Object reference not set to an instance of an object
at NUnit.Util.VSProject.LoadMSBuildProject (System.String projectDirectory, System.Xml.XmlDocument doc) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 257
at NUnit.Util.VSProject.LoadProject (System.String projectDirectory, System.Xml.XmlDocument doc) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 210
at NUnit.Util.VSProject.Load () in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 184
--- End of inner exception stack trace ---
at NUnit.Util.VSProject.ThrowInvalidFormat (System.String projectPath, System.Exception e) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 307
at NUnit.Util.VSProject.Load () in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 197
at NUnit.Util.VSProject..ctor (System.String projectPath) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/VSProject.cs:line 56
at NUnit.Util.NUnitProject.FromVSProject (System.String vsProjectPath) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/NUnitProject.cs:line 234
at NUnit.Util.NUnitProject.LoadProject (System.String path) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ClientUtilities/util/NUnitProject.cs:line 161
at NUnit.ConsoleRunner.ConsoleUi.MakeRunnerFromCommandLine (NUnit.ConsoleRunner.ConsoleOptions options) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ConsoleRunner/nunit-console/ConsoleUi.cs:line 214
at NUnit.ConsoleRunner.ConsoleUi.Execute (NUnit.ConsoleRunner.ConsoleOptions options) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ConsoleRunner/nunit-console/ConsoleUi.cs:line 58
at NUnit.ConsoleRunner.Runner.Main (System.String[] args) in /private/tmp/mono20151006-19632-tqpley/mono-4.2.0/mcs/nunit24/ConsoleRunner/nunit-console/Runner.cs:line 63
注意:如果我执行 nunit-console hiptest.publisher.samples.dll
它就像一个魅力。
我的猜测是 NUnit 期望 .csproj 文件告诉测试目标是什么。我尝试在 PropertyGroup 下添加 AssemblyName 组,但没有任何区别。
最大的问题是我找不到任何关于 Nunit 对 .csproj 内容的期望的文档(我主要是找到所有通过 VS 或使用 MSBuild 社区任务完成的示例,这听起来非常好但显然不适合我的环境(Mono,OS X 和一个与 Mono 发布的不同的 NUnit 包(不是在那个项目上,在另一个使用 Specflow 的项目上,但如果我能为这个修复它应该为第二个修复))。
提前致谢, 文森特
当 NUnit 控制台 2.4.x 和 3.x 与 .csproj
文件一起使用时,它需要一个有效且相当完整的 MSBuild/xbuild 项目来确定程序集名称、目录它将在基于库的项目中测试的位置和命名空间(如果您定义了正确的入口点,基于 Exe 的项目是可能的)。在此示例中,我使用了 NUnit 2.4.x 和 3.x console,因为存在执行差异,但使用的是相同的 .csproj
,因此如果您使用 MonoDevelop/Xamarin Studio IDE 的内置 NUnit 2.4.x 测试板也可以工作。此外,我会 假设 你也会使用 Mono 的 xbuild
在 Travis 上构建你的项目,因此需要一个完整的 .csproj
。
NUnit 3.0 控制台(通过 nuget 安装):
mono $(MTOOLS)/nunit3-console.exe nunit-lib/nunit-lib.csproj --config=Debug
NUnit Console Runner 3.0.5797
Copyright (C) 2015 Charlie Poole
Runtime Environment
OS Version: MacOSX 15.0.0.0
CLR Version: 4.0.30319.17020
Test Files
nunit-lib/nunit-lib.csproj
Errors and Failures
1) Failed : nunitlib.Test.TestCase
Expected string length 8 but was 5. Strings differ at index 0.
Expected: "Overflow"
But was: "Stack"
-----------^
at nunitlib.Test.TestCase () in <filename unknown>:line 0
Test Run Summary
Overall result: Failed
Tests run: 1, Passed: 0, Errors: 0, Failures: 1, Inconclusive: 0
Not run: 0, Invalid: 0, Ignored: 0, Explicit: 0, Skipped: 0
Start time: 2015-11-20 12:36:28Z
End time: 2015-11-20 12:36:28Z
Duration: 0.132 seconds
NUnit 2.4.8(通过 Mono 安装):
注意:NUnit 控制台 2.4.x 是 broken
由于在解析 .csproj
文件并创建预期的 CIL/assembly 位置,使用 MONO_IOMAP
解决它。这在 3.0 中不是问题。
NUnit 控制台 2.4.x w/o MONO_IOMAP:
nunit-console nunit-lib/nunit-lib.csproj -config=Debug
~~~~
Unhandled Exception:
System.IO.DirectoryNotFoundException: Directory "/Users/sushi/code/XamTests/nunit-lib/nunit-lib/bin\Debug" not found.
~~~~
NUnit 控制台 2.4.x 与 MONO_IOMAP:
MONO_IOMAP=all nunit-console nunit-lib/nunit-lib.csproj -config=Debug
NUnit version 2.4.8
Copyright (C) 2002-2007 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Unix 15.0.0.0
CLR Version: 4.0.30319.17020 ( 4.2.1 (explicit/8862921 Thu Oct 29 17:09:16 EDT 2015) )
.F
Tests run: 1, Failures: 1, Not run: 0, Time: 0.115 seconds
Test Case Failures:
1) nunitlib.Test.TestCase : Expected string length 8 but was 5. Strings differ at index 0.
Expected: "Overflow"
But was: "Stack"
-----------^
.csproj例子用在例如:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{944946CD-39B2-4A16-A8A8-9F70F0450506}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>nunitlib</RootNamespace>
<AssemblyName>nunit-lib</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Test.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
</Project>