2015-11-20 3 views
1

В настоящее время я делаю несколько тестов с C# (используя Mono и NUnit, все на OS X, но он должен работать на Travis позже). Я не устанавливал Visual Studio и удалось получить «рабочий» .csproj файл:Nunit-console - что ожидается в файле .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 сообщит, что является тестовой целью. Я попытался добавить группу AssemblyName в PropertyGroup, но это не имело никакого значения.

И большой проблемой является то, что я не могу найти какой-либо документ о том, что ожидается от содержимого .csproj от Nunit (в основном я нахожу примеры, где все делается через VS или с помощью задач сообщества MSBuild, что звучит очень приятно, но по-видимому, не очень хорошо сочетается с моей средой (Mono, OS X и другой пакет NUnit, чем тот, который был выпущен с помощью Mono (не в этом проекте, а другой - с помощью Specflow, но если я могу исправить его для этого, он должен быть исправлен для второй один)).

Спасибо заранее, Винсент

ответ

0

при использовании NUnit консоли 2.4.x и 3.x с .csproj файлов, он ожидает, что действительный и достаточно полный проект MSBuild/xbuild для определения имени сборки, местоположения dir и пространства имен, которое будет протестировано в проекте на базе библиотеки (проекты на основе Exe возможны, если вы определили правильную точку входа). В этом примере я использовал NUnit 2.4.x и 3.x консоль, так как существуют различия в исполнении, но используется то же самое .csproj, поэтому, если вы используете MonoDevelop/Xamarin Studio, встроенная тестовая панель IDE IDE также будет Работа. Также я бы предположил, что вы также использовали Mono's xbuild, чтобы построить свой проект на Трэвисе, поэтому вам понадобится полный .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 из-за жестко закодированный разделитель каталогов в стиле Windows при разборе файлов .csproj и создание ожидаемого местоположения CIL/сборки, используйте MONO_IOMAP, чтобы обойти его. Это не проблема 3.0.

NUnit консоли 2.4.xw/о 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> 
Смежные вопросы