Как протестировать сборку под .NET Standard v2?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 02.11.17 20:14
Оценка:
Пытаюсь перетащить свою библиотеку на .NET Standard v2 [VS2017]

Вроде все скомпилировалось, но не получается подсунуть тесты под NUnit.

Я так понимаю, что я не понимаю .NET Standard...

По порядку:

1. Поставил ".NET Core cross-platform development" в VS
2. Пересобрал модули
  Проектные файлы выглядят как-то так
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <EnableDefaultItems>false</EnableDefaultItems>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <RootNamespace>lcpi_lib_tests</RootNamespace>
    <Prefer32Bit>false</Prefer32Bit>
    <OutputPath>bin\vs2017_nets2.0_$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\vs2017_nets2.0_$(Configuration)\</IntermediateOutputPath>
    <KeyContainerName>lcpi.net.code.keys</KeyContainerName>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <AssemblyName>lcpi.lib.ntest.nets2_0.debug</AssemblyName>
    <DefineConstants>DEBUG;BUILD_CONF__NETSTANDARD2_0</DefineConstants>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <AssemblyName>lcpi.lib.ntest.nets2_0</AssemblyName>
    <DefineConstants>BUILD_CONF__NETSTANDARD2_0</DefineConstants>
  </PropertyGroup>
....

К проекту с NUnit тестами была добавлена ссылка на nunit.framework.dll (2.6.2) — она нормально работала с тестами откомпилированными для FW 4.6.2

3. В выходном каталоге сформировались следующие файлы:
lcpi.lib.nets2_0.debug.dll <---- это библиотека, которую надо протестировать
lcpi.lib.nets2_0.debug.pdb
lcpi.lib.ntest.nets2_0.debug.deps.json
lcpi.lib.ntest.nets2_0.debug.dll <----- Это тесты
lcpi.lib.ntest.nets2_0.debug.pdb
nunit.framework.dll
nunit.framework.xml


4. Запускаю nunit.exe (2.6.2) для сборки с тестами и получаю ошибку

---------------------------
NUnit
---------------------------
Test load failed!

System.IO.FileNotFoundException : Не удалось загрузить файл или сборку "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" либо одну из их зависимостей. Не удается найти указанный файл.

For further information, use the Exception Details menu item.
---------------------------
ОК
---------------------------


Поиск по системному диску выдал такой список:
C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.0\build\netstandard2.0\ref\netstandard.dll
C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.0.0\ref\netcoreapp2.0\netstandard.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\ref\netstandard.dll
C:\Users\Dima\.nuget\packages\runtime.win-x86.microsoft.netcore.app\2.0.0\runtimes\win-x86\lib\netcoreapp2.0\netstandard.dll
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.0.0\netstandard.dll
C:\Program Files\dotnet\sdk\2.0.2\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll
C:\Program Files\dotnet\sdk\2.0.2\Microsoft\Microsoft.NET.Build.Extensions\net461\ref\netstandard.dll


Вопрос — что нужно сделать, что nunit.exe смог загрузить мою сборку. То есть, чтобы он нашел эту netstandard.dll?

Спасибо.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Как протестировать сборку под .NET Standard v2?
От: QrystaL Украина  
Дата: 02.11.17 21:49
Оценка: 6 (1)
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>К проекту с NUnit тестами была добавлена ссылка на nunit.framework.dll (2.6.2) — она нормально работала с тестами откомпилированными для FW 4.6.2
КД>Спасибо.

https://github.com/nunit/docs/wiki/.NET-Core-and-.NET-Standard

Testing .NET Core or .NET Standard projects requires version 3.8.0 of the NUnit 3 Visual Studio Test Adapter.

Re[2]: Как протестировать сборку под .NET Standard v2?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 03.11.17 06:28
Оценка:
Здравствуйте, QrystaL, Вы писали:

КД>>К проекту с NUnit тестами была добавлена ссылка на nunit.framework.dll (2.6.2) — она нормально работала с тестами откомпилированными для FW 4.6.2

КД>>Спасибо.

QL>https://github.com/nunit/docs/wiki/.NET-Core-and-.NET-Standard

QL>

QL>Testing .NET Core or .NET Standard projects requires version 3.8.0 of the NUnit 3 Visual Studio Test Adapter.


Ага, спасибо. Добавил. Теперь вылезло вот это:

[03.11.2017 9:14:39 Error] The operation failed as details for project lcpi.lib.ntest.vs2017s2.0 could not be loaded.
[03.11.2017 9:14:41 Informational] ------ Load Playlist started ------
[03.11.2017 9:14:41 Informational] ========== Load Playlist finished (0:00:00,0025007) ==========
[03.11.2017 9:14:43 Informational] ------ Discover test started ------
[03.11.2017 9:14:44 Informational] NUnit VS Adapter 2.1.1.0 discovering tests is started
[03.11.2017 9:14:44 Warning] Dependent Assembly netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 of D:\Users\Dima\Work\.NET2\lib.net\lib\bin\vs2017_nets2.0_Debug\lcpi.lib.nets2_0.debug.dll not found. Can be ignored if not a NUnit project.
[03.11.2017 9:14:44 Warning] Dependent Assembly netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 of D:\Users\Dima\Work\.NET2\lib.net\ntest\bin\vs2017_nets2.0_Debug\lcpi.lib.ntest.nets2_0.debug.dll not found. Can be ignored if not a NUnit project.
[03.11.2017 9:14:44 Informational] NUnit VS Adapter 2.1.1.0 discovering test is finished
[03.11.2017 9:14:44 Informational] ========== Discover test finished: 0 found (0:00:01,0705979) ==========

Нашел .NET Framework app fails with "Could not load file or assembly 'netstandard, Version=2.0.0.0'"

You need to add a reference to NETStandard.Library.NETFramework package to get this dependency now.


Не подскажете — где я могу найти эту "NETStandard.Library.NETFramework"?

На nuget её нет и на системном диске её тоже не наблюдается
UPD. Почитал дальше. Нашел другие подсказки и документы, которые надо загрузить в голову
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 03.11.2017 7:22 DDDX . Предыдущая версия .
Re: Как протестировать сборку под .NET Standard v2?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 03.11.17 08:33
Оценка: 10 (3) +2 :)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Пытаюсь перетащить свою библиотеку на .NET Standard v2 [VS2017]


Решил пойти от простого к сложному.

Сделал тривиальный тестовый проект, как написано в этом документе — Testing .NET Core with NUnit in Visual Studio 2017

Получилось.

Потом:

1. Разобрал до основания основной тестовый проект
2. Заново подключил к нему Microsoft.NET.Test.Sdk, NUnit, NUnit3TestAdapter
3. Подключил к нему файлы с тестами и ссылку на библиотеку (Net Std v2), которую надо протестировать.

Тесты появились и даже отработали.

Все, кроме тестов для сериализации (похоже она в Net Std v2 не поддерживается). Но с этим буду разбираться потом.

Всем, кто переживал и мысленно меня поддерживал — СПАСИБО!
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 03.11.2017 8:35 DDDX . Предыдущая версия .
Re[2]: Как протестировать сборку под .NET Standard v2?
От: Mystic Artifact  
Дата: 04.11.17 22:49
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

Я наискось проскочил тему — но на правах КО и побрюзжать позвольте пожалуйста.

В одном из сообщений ты написал что nunit.exe не помогает. Ну а как поможет, если .net core — это не родной экзешник. Соответственно его всегда нужно запускать через dotnet(.exe). Ну, просто из очевидного. (А запуск как "родного" ессно будет приводить к запуску полного дотнета — конечно если этот экзешник не заглушка. Я тут конечно совсем глупости пишу — т.к. как бы тут Sinix не макал лицом в грязь xunit — но NUnit на мой взгляд на порядок хуже, но чисто вкусовщина. В реальности — я не использую ни то ни другое — беру более простые наброски своего фреймворка и дотачиваю до специфических нужд — повелось так. Там где этого не надо — xunit и вперёд.)

А за ссылки все кто насыпал — спасибо.

PS: А насчёт интеграции в студию — нередко полезно создавать новые проекты и посмотреть "что нынче навертели". В том числе и поэтому я свои кастомные степы всегда пишу в отдельных файлах — потом легче разобраться.
Отредактировано 04.11.2017 22:50 Mystic Artifact . Предыдущая версия .
Re[3]: Как протестировать сборку под .NET Standard v2?
От: Sinix  
Дата: 05.11.17 09:46
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

MA>т.к. как бы тут Sinix не макал лицом в грязь xunit — но NUnit на мой взгляд на порядок хуже, но чисто вкусовщина.


Вкусовщина конечно. Ну и у меня предвзятое отношение. Регулярно приходится заставлять всякие штуки работать в неочевидных сценариях.
Вот тут nUnit при всех своих недостатках просто работает, если чего не достаёт можно докрутить, в issues подскажут, на крайний случай — пару запросов пофиксили.

В случае xUnit всё с точностью до наоборот, весь саппорт заключается в рассказах про "вы неправильно пишете тесты" и "вам это не надо". В общем как начался фреймворк с войны со здравым смыслом, так и продолжает.
Re[3]: Как протестировать сборку под .NET Standard v2?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 05.11.17 14:52
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

MA>В одном из сообщений ты написал что nunit.exe не помогает. Ну а как поможет, если .net core — это не родной экзешник. Соответственно его всегда нужно запускать через dotnet(.exe). Ну, просто из очевидного.


Вообще не очевидно

c:\Program Files (x86)\dotnet>dotnet.exe "c:\Program Files (x86)\NUnit 2.6.2\bin\nunit-x86.exe"
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'c:\Program Files (x86)\NUnit 2.6.2\bin\'.


Ну да ладно. Пока не до этого.

Я тут освоил:
dotnet test lcpi.data.oledb.ntest.vs2017s2_0.csproj >tests2.log

С наскока не въехал как заставить dotnet самостоятельно создавать лог, поэтому ">tests2.log" и заюзал.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: Как протестировать сборку под .NET Standard v2?
От: Sinix  
Дата: 06.11.17 09:37
Оценка: 1 (1)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>С наскока не въехал как заставить dotnet самостоятельно создавать лог, поэтому ">tests2.log" и заюзал.

-l|--logger <LoggerUri/FriendlyName>

+ команды от самих тест-Фреймворков. xUnit вроде в --xml умеет, для nUnit проверять надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.