ไม่พบ testhost.dll โปรดเผยแพร่โครงการทดสอบของคุณแล้วลองอีกครั้ง


98

ฉันมีไลบรารีคลาส dotnet core อย่างง่ายพร้อมวิธีทดสอบ XUnit เดียว:

TestLib.csproj:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.console" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runners" Version="2.0.0" />
  </ItemGroup>

</Project>

BasicTest.cs:
using Xunit;

namespace TestLib
{
    public class BasicTest
    {
        [Fact(DisplayName = "Basic unit test")]
        [Trait("Category", "unit")]
        public void TestStringHelper()
        {
            var sut = "sut";
            var verify = "sut";

            Assert.Equal(sut, verify);
        }
    }
}

ถ้าฉันเข้าสู่โปรเจ็กต์บน CLI และพิมพ์dotnet buildโปรเจ็กต์บิลด์ ถ้าฉันพิมพ์dotnet testฉันจะได้รับสิ่งนี้:

C:\git\Testing\TestLib> dotnet test
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build started, please wait...
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build completed.

Test run for C:\git\Testing\TestLib\bin\Debug\netstandard2.0\TestLib.dll(.NETStandard,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.0.0-preview-20181205-02
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Unable to find C:\git\Testing\TestLib\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry.

Test Run Aborted.

ฉันต้องเปลี่ยนอะไรบ้างเพื่อให้การทดสอบทำงาน

หากช่วยได้ VS Code จะไม่แสดงการทดสอบในตัวสำรวจการทดสอบด้วย


ในกรณีของฉันคือคุณไม่สามารถเรียกใช้การทดสอบกับ netstandard2.0 ได้จริงเนื่องจากเป็นคำจำกัดความของ API ไม่ใช่รันไทม์ หากคุณเปลี่ยน TFM เป็น net472 สิ่งต่างๆก็ใช้ได้ดี หรือคุณสามารถกำหนดเป้าหมายแบบหลายเป้าหมายเป็น netcore + net472 ได้เช่นและเรียกใช้ทั้งสองอย่าง
kzu

คำตอบ:


25

ในกรณีของฉันปัญหาคือฉันกำหนดเป้าหมาย. NET Core 2.0 และเปลี่ยนไปใช้. NET Core 2.1 ช่วยแก้ปัญหาได้ อย่างไรก็ตามฉันใช้ Microsoft.NET.Test.SDK v16.4.0 แทนที่จะเป็น 15.9.0


150

การติดตั้งMicrosoft.NET.Test.Sdkแพ็คเกจจาก nuget package manager ช่วยแก้ปัญหาของฉันได้


นั่นรวมอยู่ในโพสต์ของฉันแล้ว - แต่คุณพูดถูก: จะมีปัญหาใหญ่ในการเรียกใช้การทดสอบหน่วยด้วย dotnet core โดยไม่มี
Matt W

2
"Microsoft.NET.Test.Sdk" คือส่วนที่หายไปเมื่อคุณเพิ่มโปรเจ็กต์ไลบรารีคลาสและเปลี่ยนเป็นโปรเจ็กต์ทดสอบ สิ่งที่ดีที่สุดที่ควรทำคือเพิ่มโครงการทดสอบใหม่จากนั้นเพิ่มแพ็กเกจนักเก็ตที่จำเป็นเช่น Rhino หรือ Moq เป็นต้น ...
Yawar Murtaza

2
สร้างมาตรฐาน .NET 2.0 lib เพิ่มxunit, xunit.runner.visualstudioและMicrosoft.NET.Test.Sdkโครงการที่ยังผลเดียวกัน ฉันคิดว่ายังมีอีกปัจจัยหนึ่งในการเล่น ...
Manfred

12
ปัญหาในกรณีของฉันเกิดจากการสร้างnetstandard2.0โครงการแทนที่จะเป็นnetcoreapp2.2โครงการ พอเปลี่ยนมาใช้แบบหลังก็ใช้ได้เลย แพคเกจเท่านั้น nuget ผมจำเป็นต้องมีxunit, และxunit.runner.visualstudio Microsoft.NET.Test.Sdk
Manfred

1
การติดตั้ง Microsoft.NET.Test.Sdk ก็ใช้ไม่ได้สำหรับฉันเช่นกันจนกว่าฉันจะทำ dotnet clean
IGx89

24

ฉันได้สร้างไลบรารีคลาสและพยายามใช้แพ็คเกจ XUnit NuGet ในนั้น

สิ่งที่ฉันควรทำคือสร้างโปรเจ็กต์ XUnit โดยใช้คำสั่งนี้: dotnet new xunit -n TestProject

ผมพบว่าหน้านี้เป็นประโยชน์


3
หลังจากดำเนินการคำสั่งนี้คุณอาจต้องการอัปเดตแพ็กเกจ nuget การอ้างอิงโครงการใหม่
Manfred

หรือติดตั้ง nuget xunit.runner.visualstudion ไปยังโครงการที่มีอยู่;)
Lukáš Kmoch

พิมพ์ผิดหรือเปล่า ฉันหาไม่เจอ
Matt W

หากคุณมีโปรเจ็กต์ที่มีอยู่คุณสามารถส่งชื่อของโปรเจ็กต์นั้นไปด้วย--forceเพื่อบังคับให้สร้างโปรเจ็กต์ใหม่เป็นโปรเจ็กต์ทดสอบ xUnit ตามความคิดเห็นของ @ Manfred คุณจะต้องอัปเดต / เพิ่มการอ้างอิงโครงการที่คุณมีในโครงการนั้นอีกครั้ง
Myles

1
@MattW ใช่ดูเหมือนจะพิมพ์ผิด ฉันคิดว่า @Lukas หมายถึงxunit.runner.visualstudioสิ่งที่คุณสามารถค้นหาได้ที่nuget.org/packages/xunit.runner.visualstudio
Manfred

12

ในกรณีของฉันปัญหาคือฉันมีโครงการส่วนขยายสำหรับ xunit นอกจากนี้ยังมีโครงการทดสอบเพื่อทดสอบส่วนขยาย เมื่อฉันดำเนินdotnet testการแก้ปัญหาของฉันโครงการส่วนขยายของฉันก็ถูกหยิบขึ้นมาเป็นโครงการทดสอบหน่วย (ฉันใช้เวลาพอสมควรในการตระหนักถึงสิ่งนี้) เหตุผลก็คือมันอ้างอิงแพ็คเกจ xunit บางอย่าง หนึ่งในแพ็คเกจ xunit เหล่านี้จะตั้งค่า<IsTestProject>true</IsTestProject>คุณสมบัติในไฟล์ csprj ของคุณโดยอัตโนมัติ นี่เป็นสิ่งที่ดีจริงๆเนื่องจาก 99.99% ของโครงการที่อ้างอิง xunit เป็นการทดสอบหน่วย ในที่สุดฉันก็สามารถแก้ปัญหานี้ได้ด้วยการตั้งค่าอย่างชัดเจน

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

ด้วยตนเองในไฟล์ csproj ของฉัน จากนั้นปัญหาก็หมดไป


11

สิ่งนี้เกิดขึ้นกับฉันหลังจากอัปเดต Microsoft.NET.Test.Sdk จาก v16.2.0 เป็น v16.4.0 ด้วย<TargetFramework>netcoreapp2.0</TargetFramework>. กำลังอัปเดตเพื่อ<TargetFramework>netcoreapp3.0</TargetFramework>แก้ไขปัญหาให้ฉัน



8

เคยเจอมาสองสามครั้งแล้วและมักจะลืมว่าเกิดอะไรขึ้น ล่าสุดฉันมี:

  • Class Library -> การกำหนดเป้าหมาย. NET Core 3.0
  • โครงการทดสอบ -> การกำหนดเป้าหมาย. NET Core 3.1

แพ็คเกจสำหรับโครงการทดสอบของฉัน:

  • ขั้นต่ำ -> 4.14.1
  • xUnit -> 2.4.1
  • xUnit.Runner.VisualStudio -> 2.4.2

ฉันเห็น:

ไม่พบ C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll โปรดเผยแพร่โครงการทดสอบของคุณแล้วลองอีกครั้ง

สิ่งที่ฉันต้องทำคือเพิ่มแพ็คเกจ nuget ที่หายไปในโครงการทดสอบของฉัน: "Microsoft.NET.Test.SDK"

ทุกอย่างกลับมาเป็นปกติ ณ จุดนี้


7

หากคุณใช้ xUnit ตรวจสอบให้แน่ใจว่าประเภทโครงการของคุณไม่เหมือนกับ netstanderd เนื่องจาก xUnit ไม่รองรับ netstanderdให้เปลี่ยนเป็น coreapp2.0 หรืออื่น ๆ


นี่เป็นปัญหาของฉันโดยเฉพาะ ดู๊! ฉันน่าจะจับได้เร็วกว่านี้ ขอบคุณสำหรับคำตอบที่ทำให้ฉันมาถูกทาง :)
Dev Leader

การเปลี่ยนโปรเจ็กต์ทดสอบเป็นแอพ. Net Core ทำให้แพคเกจ xunit.runner.visualstudio ติดตั้งได้อย่างถูกต้อง โปรดทราบว่าคุณอาจต้องปิดโซลูชันของคุณและโหลดใหม่เพื่อให้ VisualStudio จัดการการเปลี่ยนแปลง
Sheldon

6

ฉันพบปัญหาความเข้ากันได้ที่น่าสนใจมากกับเวอร์ชันหนึ่ง ฉันอัปเกรดตามแบบฝึกหัดปกติรหัสของฉันและฉันเปลี่ยนเป็น xUnit.runner.visualstudio 2.4.2 หยุดทำงานสำหรับ. Net Core 3.1 ฉันต้องดาวน์เกรดเป็น 2.4.1 และมันก็เริ่มทำงานอีกครั้ง


1
ฉันมีปัญหาเดียวกัน - สำหรับโครงการทดสอบบางโครงการในโซลูชันของฉัน ปัจจัยทั่วไปสำหรับโครงการทดสอบที่ล้มเหลวหลังจากอัปเดตเป็น 2.4.2 คือโครงการเหล่านั้นไม่มี Microsoft.Net.Test.Sdk (ไม่เคยมีปัญหามาก่อน) เพิ่ม 16.6.1 nuget และกลับมาทำงานอีกครั้ง
bit0001

ดีฉันไม่รู้เรื่องนั้น ฉันลดระดับเพื่อให้ใช้งานได้
Maximiliano Rios

1
ฉันได้รับการแก้ไขในลักษณะเดียวกัน การดาวน์เกรดแพ็คเกจ xUnit.runner.visualstudio เป็น 2.4.1 เป็นการแก้ปัญหา
Jacek Labuda

ฉันสามารถยืนยันได้ว่ายังคงเป็นปัญหากับเวอร์ชัน 2.4.3 ของ xunit.runner.visualstudio การดาวน์เกรดเป็น 2.4.1 ช่วยแก้ปัญหาได้
bN_

ฉันต้องดาวน์เกรดโครงการจำนวนมากเพราะเหตุนี้ ฉันอัปเกรดทุกอย่างโดยไม่ได้ตั้งใจและมันหยุดทำงาน
Maximiliano Rios

5

ฉันกำลังสร้างโครงการทดสอบ netcoreapp2.2 จากนั้นพยายามเรียกใช้dotnet vstestจากโฟลเดอร์ bin ฉันสังเกตเห็นว่า Microsoft Test DLL จาก:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />

ไม่ถูกส่งออกไปยังโฟลเดอร์ bin ของฉัน แทนที่จะสร้างเพียงอย่างเดียวฉันรันการเผยแพร่แทนซึ่งรวม DLL ที่จำเป็นไว้ในโฟลเดอร์ผลลัพธ์จากนั้นฉันก็สามารถเรียกใช้dotnet vstestจากที่นั่นได้


3

หากคุณกำหนดเป้าหมาย netstandard2.0 จะใช้ไม่ได้ หากใช้. NET Core ตรวจสอบให้แน่ใจว่า. csproj มีบรรทัดต่อไปนี้:

<TargetFramework>netcoreapp3.0</TargetFramework>

และยังมีแพ็คเกจ Microsoft.NET.Test.Sdk


2

ปัญหาเดียวกันกับที่ฉันประสบกับโครงการ Nunit (.net core 3.1) ฉันใช้ Microsoft.NET.Test.SDK v16.6.1 ฉันปรับรุ่นเป็น 15.9.0 และเริ่มทำงาน


1

เมื่อพบข้อผิดพลาดนี้สาเหตุที่แท้จริงคือการทดสอบมีความยาวสูงสุดสำหรับเส้นทาง Windows (MAX_PATH) ซึ่งกำหนดเป็นอักขระ 260 ตัว


0

หากคุณกำลังเรียกใช้โปรเจ็กต์โดยการโคลนมากกว่าโซลูชันคือการติดตั้ง Microsoft.NET.Test.Sdk วิธีการ: เครื่องมือ> Nuget Package Manager> จัดการ Nuget Packages สำหรับโซลูชัน ... > ค้นหา Microsoft.NET.Test.Sdk และติดตั้งสำหรับโครงการทดสอบของคุณ


0

นอกจากนี้ยังอาจเกิดจากการพยายามเรียกใช้โปรเจ็กต์ที่ไม่ได้ทดสอบโดยไม่ได้ตั้งใจซึ่งมักเกิดขึ้นเมื่อตัวกรองไฟล์ทดสอบของคุณกว้างเกินไป


0

ได้รับข้อผิดพลาดนี้เมื่อพยายามดีบักการทดสอบหน่วย ด้านล่างนี้เป็นขั้นตอนที่ฉันลอง

  • ขั้นตอนที่ 1: ติดตั้ง Microsof.TestPlatform.TestHost และพยายามเรียกใช้การทดสอบ แต่โชคไม่ดี
  • ขั้นตอนที่ 2: เปลี่ยน Target framework จาก. NET Core 2.0 เป็น 2.1 และพยายามรันการทดสอบ แต่โชคไม่ดี
  • ขั้นตอนที่ 3: ปิดและเปิด VS2017 และพยายามเรียกใช้

เย้!!! มันใช้งานได้ :-) อย่าพลาดที่จะลองขั้นตอนสุดท้าย ;-) หวังว่านี่จะช่วยคนอย่างฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.