ไม่พบการทดสอบหน่วยใน Visual Studio 2017


213

ฉันดิ้นรนกับ VS 2017 ตั้งแต่ฉันติดตั้ง ตอนนี้ดูเหมือนว่าการทดสอบหน่วยจะเรียกใช้จากบรรทัดคำสั่ง "การทดสอบ dotnet" เท่านั้น

โครงการของฉันคือ. NET Core 1.1.1 ฉันมี SDK และการอัพเดตเฟรมเวิร์กสำหรับ 1.1.1 ที่ติดตั้ง

ฉันได้ลองตัวอย่างที่ MSDN ( https://msdn.microsoft.com/en-us/library/ms182532.aspx ) ซึ่งก็ล้มเหลวเหมือนกันทุกประการ

แพ็คเกจ NuGet ทั้งหมดสำหรับการทดสอบและโครงการหลักเป็นปัจจุบัน และทั้งโครงการทดสอบและโครงการหลักที่สร้างขึ้นโดยไม่มีข้อผิดพลาด การทดสอบรันได้สำเร็จจากบรรทัดคำสั่ง

มีใครได้รับการทดสอบหน่วยที่จะทำงานใน VS 2017 ถ้าเป็นเช่นนั้นได้อย่างไร

ขอบคุณ John


อัปเดต - ขยาย

นี่คือตัวอย่างของโครงการทดสอบอย่างง่ายที่ไม่ได้ทำงานบนGitHub นี่คือตัวอย่างของ xUnit แต่ฉันลองใช้ NUnit และ visual studio ที่สร้างขึ้นในการทดสอบ MS ไม่ว่าฉันจะทำการทดสอบอะไรหรือเปลี่ยนแปลงอะไรฉันก็ไม่สามารถรับ VS test Runner เพื่อค้นหาการทดสอบใด ๆ

สิ่งที่ฉันได้ลอง

  • การลบไฟล์แคชทดสอบ VS DEL %TEMP%\VisualStudioTestExplorerExtensions
  • รีสตาร์ท VS
  • เครื่องมือทดสอบการปิด / เปิด
  • สำหรับ xUnit ติดตั้งMicrosoft.DotNet.InternalAbstractions( ดูโพสต์ SO )
  • สำหรับ NUnit ต้องแน่ใจว่าติดตั้งอะแด็ปเตอร์และเวอร์ชันเดียวกัน (3) เป็นแพ็กเกจ NUnit
  • test -> test settings -> default processor architecture ตั้งเป็น x86


ทุกคนสามารถให้คำถามได้โปรดแสดงตัวอย่างการทำงานของโซลูชัน. Net Core 1.1.0 ใน VS2017 (ไฟล์โครงการ. csproj) ที่นักสำรวจทดสอบ VS ประสบความสำเร็จในการค้นหาการทดสอบหน่วยหรือแสดงให้ฉันเห็นปัญหาในตัวอย่างที่ระบุ


ฉันพบว่า VS2017 ไม่ได้ติดตั้งแพ็คเกจที่จำเป็นทั้งหมด เมื่อฉันพยายามย้าย MonoGame จากพีซีเครื่องเก่าไปยังเครื่องใหม่ด้วย windows 10 และ VS 2017 ที่ติดตั้งใหม่มันเริ่มโยนข้อผิดพลาดแปลก ๆ เกี่ยวกับแพ็คเกจที่หายไป หลังจากติดตั้ง VS2015 พร้อมกับ VS2017 ปัญหาทั้งหมดก็หายไป อาจลองติดตั้ง VS2015 นอกจากนี้
Mateusz

2
ลองติดตั้งแพคเกจการทดสอบด้วยโปรแกรมติดตั้ง Visual Studio
Markiian Benovskyi

ฉันกำลังดูว่า VS 2017 มีการตั้งค่าตัวแปรสภาพแวดล้อมทั้งหมดอย่างถูกต้องหรือไม่
John Pezzanite

1
สำหรับ NUnit คุณต้องใช้แพ็กเกจ NuGet สำหรับอะแดปเตอร์และต้องเป็น 3.8.0-alpha1 หรือใหม่กว่า
Rob Prouse

2
ในกรณีของฉันมันเป็นแค่การปรากฏของapp.configแฟ้มในโครงการทดสอบของฉัน: stackoverflow.com/a/47497668/67824
Ohad Schneider

คำตอบ:


189

ในกรณีของฉันปรากฏว่าฉันต้องอัพเกรดอะแดปเตอร์ทดสอบและกรอบการทดสอบ เสร็จสิ้น

ตัวอย่างการใช้ NuGet Package Manager:

ป้อนคำอธิบายรูปภาพที่นี่


4
สิ่งนี้ช่วยฉันด้วย! โปรดทราบว่าคุณสามารถ "จัดการแพคเกจ Nuget" ในระดับโซลูชันและทำสิ่งนี้สำหรับโครงการทั้งหมดที่จำเป็นต้องใช้ จากนั้นคุณอาจได้รับข้อผิดพลาด "การอ้างอิงที่คลุมเครือ" - เพียงแค่ลบ DLL เก่า (Microsoft.VisualStudio.QualityTools.UnitTestFramework) ออกจากการอ้างอิง
Prashanth Subramanian

48
สิ่งเหล่านี้ควรเป็นส่วนขยายของ Visual Studio ไม่ใช่แพ็คเกจ NuGet
Jaider

1
เรามีโครงการ MSTest เก่า ๆ จำนวนมากและฉันไม่ทราบว่ามันถูกย้ายไปเป็นแพ็คเกจ NuGet สิ่งนี้แก้ไขได้สำหรับฉันเช่นกัน แต่เดิมคิดว่ามันเป็นจุดบกพร่องของ ReSharper รุ่นใหม่จนกว่าฉันจะรู้ตัวว่า VS Test Explorer นั้นไม่สามารถค้นพบการทดสอบของฉันได้
David Anderson

1
ฉันทำสิ่งเดียวกันกับคำตอบนี้ ในโซลูชัน VS2017 ของฉันฉันเพิ่มโครงการ MSTest เพิ่มการทดสอบเล็กน้อย แต่การสร้างโซลูชันจะทำให้: ค้นพบการทดสอบเสร็จแล้ว: พบ 0 ดังนั้นสำหรับโครงการทดสอบใน NuGet Package Manager (คุณสามารถทำได้ที่ระดับโซลูชัน) ฉันได้อัปเดต MSTest.TestAdapter และ MSTest.TestFramework ทั้งจาก v1.1.18 เป็น v1.2.0 จากนั้นหลังจากสร้างบิลด์การทดสอบของฉันจะปรากฏใน Test Explorer
Kershaw

1
ใช้งานได้ดีสำหรับฉันฉันต้องไปที่ผู้จัดการแพคเกจ nuget ใน VS2017 สำหรับโครงการทดสอบเฉพาะและอัปเดตแพคเกจต่างๆที่ฉันมีเช่น nunit ฯลฯ จากนั้นสร้าง> สร้างใหม่และไม่เป็นไร
Tahir Khalid

126

สิ่งนี้ใช้ได้กับฉัน (ไม่ทราบว่าเป็นผลมาจากการเปลี่ยนพื้นที่ทำงานที่เสียหายบางอย่าง):

การลบไฟล์แคชทดสอบ VS ใน% TEMP% \ VisualStudioTestExplorerExtensions และรีสตาร์ท VS2017


4
สิ่งนี้ใช้ได้ครั้งเดียวไม่ใช่หลังจากนั้น อะไร (ในขณะนี้) คงมันสำหรับฉันถูกลบ TestResults โฟลเดอร์ bin / obj (พร้อมกับการทำความสะอาดไดเรกทอรีชั่วคราวนี้)
icesar

24
ทุกคนที่สงสัยว่าที่ไหน%TEMP%- นำหน้าต่างคำสั่งและประเภทecho %TEMP%
mike123

21
ไม่มีโฟลเดอร์ใน temp: /
Douglas Gaskell

ดังนั้นสาเหตุของพฤติกรรมดังกล่าวคืออะไร?
Mykhailo Seniutovych

1
วิธีที่ง่ายที่สุดในการเข้าถึง% TEMP% คือการชนะ + R และพิมพ์% TEMP%
PontiusTheBarbarian

58

API สำหรับอะแดปเตอร์ทดสอบสำหรับ. NET Core เปลี่ยนไปเมื่อเปิดตัว Visual Studio 2017 และย้ายจากproject.jsonรูปแบบเป็นcsprojรูปแบบ สิ่งนี้ทำให้dotnet-test-*อะแดปเตอร์ที่มีอยู่เช่นdotnet-test-nunitล้าสมัย

อะแดปเตอร์ได้รับการปรับปรุง แต่วิธีที่คุณตั้งค่าและเรียกใช้การทดสอบใน Visual Studio หรือในบรรทัดคำสั่งด้วยdotnet testต้องมีการอ้างอิงที่แตกต่างกันในโครงการทดสอบของคุณ ระวังเอกสารใด ๆ ที่คุณพบว่าแพ็คเกจอ้างอิงในdotnet-test-*รูปแบบนั้นล้าสมัยไปแล้ว

ขั้นแรกโครงการทดสอบของคุณต้องกำหนดเป้าหมายแพลตฟอร์มเฉพาะอย่างใดอย่างหนึ่งคือ. แกนหลักหรือ. NET Framework ไม่สามารถกำหนดเป้าหมาย. NET Standardแม้ว่ารหัสที่คุณทดสอบคือ. NET Standard นี่เป็นเพราะเป้าหมายของการทดสอบระบุว่าแพลตฟอร์มใดที่จะทำการทดสอบภายใต้ . NET Standard เปรียบเสมือน PCL (Portable Class Library) ซึ่งมันสามารถทำงานได้บนหลาย ๆ แพลตฟอร์ม

ถัดไปคุณต้องเพิ่มการอ้างอิงถึงMicrosoft.NET.Test.Sdkกรอบการทดสอบของคุณที่เลือกและอะแดปเตอร์ทดสอบที่เข้ากันได้ สำหรับ NUnit การอ้างอิงของคุณจะมีลักษณะเช่นนี้

<itemgroup>
    <packagereference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></packagereference>
    <packagereference Include="NUnit" Version="3.7.1"></packagereference>
    <packagereference Include="NUnit3TestAdapter" Version="3.8.0"></packagereference>
</itemgroup>

ความคิดเห็นข้างต้นกล่าวถึงการเพิ่ม

<ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

สิ่งนี้ไม่จำเป็นอย่างเคร่งครัด แต่สามารถช่วยได้ มันถูกเพิ่มโดยอัตโนมัติไปยังโครงการทดสอบหน่วยทั้งหมดโดย Visual Studio เพื่อช่วยให้ค้นหาโครงการที่มีการทดสอบได้อย่างรวดเร็ว

หากการทดสอบของคุณไม่ปรากฏใน Visual Studio สิ่งแรกที่ต้องลองคือปิดโซลูชันของคุณแล้วเปิดใหม่อีกครั้ง ดูเหมือนว่ามีข้อบกพร่องใน Visual Studio ที่ตรวจไม่พบการเปลี่ยนแปลงโครงการเมื่อคุณแก้ไข

สำหรับข้อมูลเพิ่มเติมดูการทดสอบ. NET Core ด้วย NUnit ใน Visual Studio 2017


2
การกำหนดเป้าหมาย. NET Framework แทนที่จะเป็น. NET Standard เหมาะสำหรับฉัน ขอบคุณ
Ben Griswold

7
การอ้างอิง Microsoft.NET.Test.SDK นั้นหายไปในโครงการของฉันและไม่มีสิ่งบ่งชี้ใด ๆ ที่สิ่งใดจะต้องอาศัยการแสดง เพิ่มผ่านคอนโซล nuget และทุกอย่างเริ่มทำงาน ขอบคุณสำหรับรายการอ้างอิง!
GWhite

ฉันต้องคัดลอกโฟลเดอร์นี้จากผู้ร่วมงานไปยังไดเรกทอรี temp ของฉันและรีสตาร์ท VS:% TEMP% \ VisualStudioTestExplorerExtensions \ MSTest.TestAdapter.1.1.18
Heiner

ฉันจะทดสอบโครงการ netstandard 2.0 ได้อย่างไรถ้าฉันเปลี่ยน Target Framework ของฉัน ฉันไม่สามารถรวบรวมได้อีกต่อไปเพราะโครงการ netstandard2.0 ไม่สามารถอ้างอิงได้โดยโครงการที่ติดแท็ก net46
Jerome2606

1
สิ่งนี้ใช้ได้สำหรับฉัน ขอบคุณสำหรับการแก้ปัญหาอย่างละเอียด
Talha Ashfaque

42

ฉันมีปัญหาเดียวกันและทำให้มันทำงานได้โดยทำสิ่งต่อไปนี้ .. :

  • ก่อนปิดอินสแตนซ์ที่เปิดของ Visual Studio ทั้งหมดและลบโฟลเดอร์นี้:% TEMP% \ VisualStudioTestExplorerExtensions ( กำลังทดสอบกับ Visual Studio )
  • ไปที่ผู้จัดการแพคเกจ Nuget ของคุณและติดตั้ง Microsoft.NET.Test.Sdk (15.3.0-preview-20170425-07) ก่อนจากนั้นจึงติดตั้ง xunit.runner.visualstudio (2.3.0-beta1-build1309) ดูภาพหน้าจอของ Nuget ที่แนบมาเพื่อดูแพ็คเกจทั้งหมดที่ฉันต้องติดตั้งเพื่อรับ VS 2017 ล่าสุดเพื่อตรวจจับการทดสอบของฉันภาพหน้าจอของ Nuget

35
การลบ% Temp% \ VisualStudioTestExplorerExtensionsเพียงพอสำหรับฉัน
Juan Pablo Gomez

Yeap เพียงแค่ลบสิ่งนั้นและรีสตาร์ท VS แก้ไข
Juan Carlos

ไม่มีใครรู้ว่าอะไรทำให้เกิดสิ่งนี้ในตอนแรก? ฉันเคยเกิดขึ้นกับฉันสองครั้งแล้ว แต่การลบโฟลเดอร์นั้นและการรีสตาร์ท VS ทำงาน มันแปลกมาก
RubyHaus

@PmanAce - ฉันทำจริง ฉันใช้อินสแตนซ์ TFS ที่แตกต่างกันสองรายการ (หนึ่งรายการต่อโครงการ) ดังนั้นพื้นที่ทำงานจะเปลี่ยนโดยอัตโนมัติเมื่อฉันสลับโครงการ
RubyHaus

การลบโฟลเดอร์และการเพิ่ม nuget Microsoft.NET.Test.Sdkดูเหมือนจะใช้ได้ผลสำหรับฉัน .. ขอบคุณ StackOverflow (. NET Framework WebApi 2 solution)
bkwdesign

40

ลืมที่จะทำให้ชั้นทดสอบ สาธารณะป้องกันไม่ให้เป็นวิธีการทดสอบภายในที่จะค้นพบ

ฉันมีโครงการ xUnit เริ่มต้นและลบตัวอย่าง UnitTest1.cs แทนที่ด้วยคลาสทดสอบคอนโทรลเลอร์ด้วยการทดสอบสองสามครั้ง แต่ไม่พบ

เรื่องสั้นสั้น ๆ หลังจากอัพเดตแพ็คเกจ xUnit, Test.Sdk, xUnit.runner และสร้างโครงการขึ้นใหม่ฉันพบข้อผิดพลาดในการบิลด์:

ข้อผิดพลาดคลาสทดสอบ xUnit1000 ต้องเป็นสาธารณะ

โชคดีที่เวอร์ชันที่อัปเดตแล้วได้โยนข้อยกเว้นนี้เพื่อให้ฉันมีปัญหา

การแก้ไขคลาสการทดสอบเพื่อเป็นแบบสาธารณะแก้ไขปัญหาของฉัน


6
ไม่แน่ใจว่าทำไมลงคะแนน แต่ก่อนที่กาแฟยามเช้าของฉัน 100% นี้ถูกมองข้ามโดยฉัน
Andrei

1
ลองคำตอบสำหรับคำถาม / ปัญหานี้ทั้งหมดและนี่คือคำตอบที่ได้ผลในที่สุด!
FastTrack

3
อันนั้นน่าอายอย่างไม่น่าเชื่อ แต่ .. อะไรก็ตาม สิ่งที่เฮฮาคือถ้าคุณสร้างชุดทดสอบใน VS2017 มันจะไม่สร้างpublicคลาส แต่เป็นคลาสดังนั้นมันจะไม่ค้นพบจนกว่าคุณจะเพิ่มpublicตัวระบุ
briosheje

แน่นอน. สิ่งที่ไม่ดีของฉัน - mstest ควรมีคุณสมบัตินี้
Crismogram

10

ในกรณีของฉันฉันกำหนดเป้าหมายโครงการทดสอบเพื่อx64สถาปัตยกรรมศาสตร์และการตั้งค่าการทดสอบสถาปัตยกรรม (test-> เริ่มต้นประมวลผลสถาปัตยกรรม) x86เปลี่ยนถูกกำหนดให้ พวกเขาไม่ตรงกัน

หลังจากตั้งค่ากลับไปแล้วสถาปัตยกรรมการตั้งค่าการทดสอบเป็นx64และสร้างการทดสอบทั้งหมดอีกครั้งจะถูกค้นพบอีกครั้ง


ใน vs2017 การตั้งค่าจากเมนูการทดสอบ -> การตั้งค่าการทดสอบ -> สถาปัตยกรรมตัวประมวลผลเริ่มต้น
IcyBrk

8

ฉันมีปัญหากับ VS 2017 ในการหา UnitTest ของฉันเช่นกัน ไม่ใช่ปัญหาที่แน่นอนที่ John กำลังถาม - แต่นี่เป็นผลลัพธ์แรกใน google ที่ฉันมาหาดังนั้นฉันต้องการแบ่งปันปัญหาของฉัน

ฉันมีวิธีแก้ไขปัญหาแบบเดิมที่กลับมาจาก VS2010 ในระดับ VS2013, VS2015 ตอนนี้ใน VS2017 ดูเหมือนว่าเนมสเปซสำหรับ[TestMethod]แอตทริบิวต์เปลี่ยนไป

ก่อนที่มันจะถูกใช้

Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0

ฉันสร้าง Test.dll ใหม่ในโครงการและที่ใช้เป็นค่าเริ่มต้น

Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0

ดังนั้นทางออกของฉันคือการสร้างโครงการ UnitTest ใหม่จากภายใน VS2017 อาจเปลี่ยนการอ้างอิงแอสเซมบลีสำหรับโครงการทดสอบแบบเก่าจะใช้ได้เช่นกัน ด้วยการอ้างอิงใหม่ VS2017 ได้ค้นพบการทดสอบหน่วยเหล่านั้น


น่าเศร้าแม้แต่โครงการทดสอบหน่วยใหม่ไม่มีการทดสอบก็ปรากฏขึ้นสำหรับฉัน: /
Douglas Gaskell

7

อย่าอ่านบทความล้าสมัยภายใต้ MSDN วัสดุที่เกี่ยวข้อง. NET Core อยู่ภายใต้ docs.microsoft.com

https://docs.microsoft.com/en-us/dotnet/articles/core/testing/

โดยทั่วไปคุณต้องมีแอปคอนโซล. NET Core เพื่อให้มีกรณีทดสอบหน่วย


ขอบคุณมาก Lex หากบทความนี้ถูกต้องวิธีเดียวในการทดสอบ. NET Core มาจากบรรทัดคำสั่ง - ดังนั้นการรวม VS ทั้งหมดที่เรามีกับการทดสอบการทำงานใน VS 2015 จะทำให้ถูกต้องหรือไม่
John Pezzanite

คุณใช้ xUnit.net หรือ MSTest หรือไม่
Lex Li

@ JohnPezzanite คุณต้องแสดงสิ่งที่คุณทำมากขึ้น (อาจเป็น repo ของ GitHub ถ้าเป็นไปได้) ฉันมีโครงการที่ GitHub ซึ่งทำงานได้อย่างไร้ที่ติและอื่น ๆ อีกมากมาย
Lex Li

ทำตามตัวอย่างในบรรทัดที่ฉันให้ไว้ ฉันได้ลองกับ. NET standard และ. NET Core โดยมีการทดสอบหน่วยของ Microsoft ดังตัวอย่างและกับ xUnit . NET มาตรฐานทำงานร่วมกับ VS 2017 ในขณะที่. NET Core จะทำงานจากบรรทัดคำสั่งเท่านั้น แต่ฉันทำซ้ำสิ่งที่ฉันได้กล่าวข้างต้น ดูเหมือนว่า Microsoft ได้ลบฟอร์มการรวมการทดสอบหน่วย. NET Core ทั้งหมด VS 2017 แล้ว
John Pezzanite

@JohnPezzanite ทดสอบGitHub.com/lextm/sharpsnmplibและโซลูชัน NetStandard
Lex Li

6

สำหรับฉันปัญหาคือฉันตั้งใจวาง testcase ในชั้นเรียนภายใน

[TestClass]
  internal class TestLib {
}

ที่ก่อให้เกิดการทดสอบไม่ได้ระบุ


5

ตรวจสอบให้แน่ใจว่าคุณใช้ Microsoft.NET ที่ถูกต้อง Test.Sdk:

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

อย่าใช้รุ่นก่อนวางจำหน่าย หรือคุณต้องเปลี่ยนเป็นแอปคอนโซล (ไม่ใช่ไลบรารี่) ฉันมีปัญหาที่คล้ายกัน แต่ด้วยรุ่นล่าสุด (15.0.0) มันเริ่มทำงานอีกครั้ง

นอกจากนี้คุณอาจต้องเพิ่ม:

  <ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
  </ItemGroup>

แต่ฉันไม่คิดว่ามันเป็นสิ่งจำเป็น


ไฟล์นี้อยู่ที่ใด ฉันสามารถหาส่วน "การบริการรวม" ในไฟล์โครงการ (* .csproj) ของฉัน แต่ไม่ใช่ PackageReference
Chris Bennet

@ChrisBennet ในไฟล์ * test.csproj ของคุณ
Evgeni Nabokov

1
@ evgeni-nabokov ถูกต้อง การเปลี่ยนแปลงทั้งหมดเหล่านี้อยู่ในไฟล์ [project] .test.csproj คลิกขวาที่โครงการในโซลูชันและเลือก "แก้ไข [project] .test.csproj" ดูตัวอย่างได้ที่: github.com/RenetConsulting/angularcore.net/blob/master/Business/ …
Alex Altotsky

5

ฉันรู้ว่า OP ได้ระบุสิ่งนี้ไว้ในรายการตรวจสอบของเขา แต่มันง่ายที่จะมองข้ามจุดนั้นในขณะที่ทำการติดตั้ง Visual Studio 2017 ใหม่ทั้งหมดและติดตั้งโครงการใหม่ นอกเหนือจากNUnit แม่แบบโครงการและNUnit กรอบหนึ่งในความต้องการที่จะติดตั้งอะแดปเตอร์ NUnit Install-Package NUnit3TestAdapter -Version 3.9.0แยกกันเช่นการใช้คำสั่ง หลังจากนั้น Visual Studio Community 2017 เริ่มค้นพบการทดสอบหน่วยโดยไม่มีปัญหาใด ๆ


1
สิ่งนี้ช่วยฉัน!
YvesR

OMG อันนี้ทำเพื่อฉัน ถ้าฉันสามารถชุบคุณด้วยความโปรดปรานฉันจะ
Ash

นี่เป็นทางออกเดียวที่ใช้ได้สำหรับฉันขอบคุณ!
Vadim Tofan

5

ในกรณีของฉัน Test Explorer ไม่พบการทดสอบของฉันหลังจากฉันย้ายโครงการไปยังโซลูชันใหม่

คำตอบก็คือฉันมีการอ้างอิงถึง MS Test Adapter รุ่นเก่าในโครงการของฉัน

ฉันมีบรรทัดด้านล่างซ้ำสำหรับเวอร์ชั่น 1.1.11 ของ MS Test Adapter ในไฟล์ cs.proj ของฉัน:

<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" />

เพื่อแก้ไขปัญหา

  1. คลิกขวาที่โครงการและเลือก 'ยกเลิกการโหลดโครงการ'
  2. คลิกขวาที่โครงการและเลือก 'แก้ไข'
  3. ลบบรรทัดที่นำเข้าอะแดปเตอร์รุ่นเก่า
  4. คลิกขวาที่โครงการและเลือก 'โหลดโครงการใหม่'
  5. สร้างโซลูชัน / โครงการใหม่

มีปัญหาเดียวกัน การลบและการสร้างโซลูชันขึ้นใหม่ไม่ทำงาน เริ่ม VS ใหม่และการทดสอบถูกค้นพบ!
Mike Ward

4

เพิ่งพบปัญหานี้กับ Visual Studio ที่ไม่สามารถหาการทดสอบของฉันไม่เห็นปุ่มเพื่อเรียกใช้นอกเหนือจากวิธีการและพวกเขาไม่ได้รับโดยการทดสอบทั้งหมดในโครงการ

ปรากฎว่าชั้นทดสอบของฉันไม่ได้เปิดเผยต่อสาธารณะ! ทำให้เป็นแบบสาธารณะอนุญาตให้ VS ค้นพบการทดสอบ


2

สำหรับฉันง่ายต่อการสร้างโครงการทดสอบใหม่ที่ทำงานได้ดีกับ Visual Studio 2017 ... และเพียงแค่คัดลอกไฟล์ทดสอบเพิ่มการอ้างอิงและแพ็คเกจ NuGet ตามต้องการ

ป้อนคำอธิบายรูปภาพที่นี่


การสร้างโครงการใหม่อาจช่วยประหยัดเวลาปวดหัวได้!
M.kazem Akhgary

2

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

หลังจากแก้ไขการเชื่อมโยงแอสเซมบลีใน app.config การทดสอบของฉันถูกค้นพบ


2

การค้นพบ

คำตอบด้านบนไม่ทำงานสำหรับฉัน (รีสตาร์ทอัปเดตเป็นเวอร์ชัน 1.1.18 ... ฉันได้รับการอัปเดตแล้วลบไฟล์ temp ล้างแคช NuGet เป็นต้น)

สิ่งที่ฉันค้นพบคือฉันมีการอ้างอิงที่แตกต่างกับMSTest.TestAdapterและMSTest.Frameworkในโครงการทดสอบต่าง ๆ (โซลูชันของฉันมีสองข้อ) มีคนชี้ไปที่ 1.1.18 เช่น ...

packages.config

<package id="MSTest.TestAdapter" version="1.1.18" targetFramework="net461" />
<package id="MSTest.TestFramework" version="1.1.18" targetFramework="net461" />

... แต่อีกอันมีการอ้างอิงถึง 1.1.11 คำตอบบางข้อข้างต้นนำไปสู่การค้นพบนี้เมื่อไลบรารีสองเวอร์ชันปรากฏขึ้นในไดเรกทอรีชั่วคราวของฉัน (% TEMP% \ VisualStudioTestExplorerExtensions \) หลังจากรีสตาร์ท Visual Studio

สารละลาย

เพียงอัปเดตแพ็คเกจของฉันกำหนดค่าเวอร์ชัน 1.1.18 คือสิ่งที่เรียกคืนการทำงานของหน่วยทดสอบใน VS ปรากฏว่ามีข้อบกพร่องบางอย่างที่ไม่อนุญาตให้มีการอ้างอิงแบบเคียงข้างกันของไลบรารี MSTest หวังว่านี่จะช่วยคุณได้

ข้อมูลเพิ่มเติม:

  • Visual Studio 2017 Ent: 15.5.6 (ฉันได้อัปเดตจาก 15.0.1 ด้วยหวังว่าจะแก้ไขปัญหานี้ แต่ฉันมีทั้งคู่)

2

ทางออกคือการลบของฉัน app.configไฟล์ของฉันออกจากโครงการทดสอบหน่วยของฉัน การทดสอบจะปรากฏขึ้นอีกครั้ง!

ไฟล์นี้อ้างถึง dll บางตัวใน bindingredirects ที่ไม่ได้มีอยู่จริงในการอ้างอิงโครงการ เพิ่มการผูกแอสเซมบลีที่จำเป็นสำหรับโครงการของคุณอีกครั้ง


1

ในกรณีของฉันมันเป็นโครงการ UWP ในการแก้ปัญหาที่ก่อให้เกิด

เมื่อฉันยกเลิกการโหลดโครงการ UWP การทดสอบถูกค้นพบ เมื่อฉันโหลดมันกลับมาทดสอบหายไปอีกครั้ง

พยายามที่จะยกเลิกการโหลดโครงการทั้งหมดและให้โครงการทดสอบเท่านั้น โซลูชันการสร้างใหม่สิบรายการและ Test Shound ปรากฏใน Test Runner โหลดโครงการหนึ่งต่อหนึ่งและสร้างโซลูชันใหม่ในแต่ละครั้งเพื่อค้นหาว่าโครงการใดก่อให้เกิดปัญหา

repo ตัวอย่าง

รายงานข้อผิดพลาด VS


ขอบคุณคำตอบ แต่นี่ไม่ใช่ปัญหาของฉัน หากคุณดูตัวอย่าง repo ที่ฉันเชื่อมโยงกับคำถามของฉันมีเพียงโครงการเดียวในการแก้ปัญหา ไม่มีโครงการอื่นที่จะลบ วิธีแก้ปัญหานั้นคือการทดสอบดังนั้นฉันจึงลองทำในสิ่งที่คุณพูดว่าการไม่โหลดโครงการในโซลูชันจริงของฉัน แต่มันไม่ทำงาน
rayepps

1

ปัญหา

ปัญหาคือ Visual Studio กำลังรับ 'สับสน' มากกว่ารุ่น dotnet core บนเครื่อง เมื่อฉันไปที่แผงควบคุม -> ถอนการติดตั้งโปรแกรมฉันติดตั้ง dotnet core SDK และ Runtimes ที่แตกต่างกัน 8 ตัว นี่เป็นสาเหตุให้ VS มีข้อผิดพลาดเมื่อพยายามค้นหาการทดสอบ

ตรวจสอบปัญหา

คุณสามารถตรวจสอบปัญหาโดยไปที่บรรทัดคำสั่งและได้รับรุ่นของ dotnet $ dotnet --versionบนของคุณ หากคุณเห็นอะไรก็ตามยกเว้นรุ่นล่าสุดที่คุณติดตั้งแสดงว่าเครื่องของคุณมีข้อผิดพลาดบางอย่างและไม่ได้ใช้รุ่นที่ถูกต้อง ตัวอย่าง ... หากคุณ1.0.1ติดตั้งdotnet core แต่เมื่อคุณได้รับเวอร์ชันเมื่อพร้อมรับคำสั่งแล้วจะ1.0.0มีปัญหาเกิดขึ้น

การแก้ไขปัญหา

ลบสิ่งเก่าทั้งหมด ฉันเริ่มต้นด้วยสิ่งที่ฉันคิดว่าฉันต้องการที่จะลบ (รุ่น dotnet rc ที่เก่าที่สุด) แต่มันก็ยังให้รุ่นที่ผิดเมื่อทดสอบปัญหา ในที่สุดฉันก็ยอมรับที่จะทำความสะอาดอย่างสมบูรณ์ ผม...

  • ถอนการติดตั้งแอพพลิเคชั่นสตูดิโอภาพทั้งหมด (บนเครื่อง VS2015 และ VS2017 ของฉัน)
  • ถอนการติดตั้ง dotnet core ทุกรุ่น (แม้ล่าสุด)

หลังจากที่เครื่องของฉันไม่มีข้อมูล VS และ Donet ทั้งหมดฉันติดตั้งเฉพาะ VS2017 (มันมาพร้อมกับ dotnet ล่าสุด) ฉันสร้างโครงการทดสอบ xUnit และผู้สำรวจทดสอบพบว่าได้รับการแก้ไขทันที

อาจดูเหมือน overkill แต่ฉันใช้เวลาสองสัปดาห์ในการแก้ไขปัญหาด้วยวิธีอื่น หากคุณมีปัญหาเพียงทำมันแม้ว่ามันอาจใช้เวลาหลายชั่วโมงในการถอนการติดตั้ง / ติดตั้งรายการมันอาจจะช่วยคุณประหยัดเวลา

อ้างอิง

  • ดูโพสต์บล็อกของ @epestic ซึ่งเขาให้รายละเอียดเพิ่มเติมเกี่ยวกับการแก้ไขปัญหา

1

ฉันลองทุกอย่างแล้ว แต่ไม่มีอะไรช่วย ในกรณีของฉันฉันมีวิธีแก้ปัญหาด้วยโครงการทดสอบหลายโครงการและบางโครงการใช้กรอบการทดสอบเก่าของ MS ดังนั้น Visual Studio จึงพบเฉพาะโครงการเหล่านั้น

ผมติดตั้งแพคเกจกรอบทดสอบสำหรับโครงการทดสอบทั้งหมดแสดงให้เห็นว่าในคำตอบที่ได้รับการยอมรับ จากนั้นนำการอ้างอิงไปยังเครื่องมือคุณภาพเก่าเริ่มต้น Visual Studio ใหม่และตอนนี้ฉันสามารถดูการทดสอบทั้งหมดได้


1

สำหรับ C ++:

เนื่องจากไม่มีคำถามพิเศษสำหรับการทดสอบ C ++ แต่หัวข้อเหมือนกันมากนี่คือสิ่งที่ช่วยฉันเมื่อฉันมีปัญหากับการค้นพบการทดสอบ

หากคุณติดตั้งการพัฒนาเดสก์ท็อปด้วย C ++เพียงอย่างเดียวโซลูชันคือติดตั้งการพัฒนาแพลตฟอร์ม Windows สากลด้วยเครื่องมือเสริมแพลตฟอร์ม Windows Universal C ++เครื่องมือคุณสามารถเลือกสิ่งเหล่านี้ได้ในโปรแกรมติดตั้งเว็บสตูดิโอเสมือนจริง

หลังจากนั้นให้สร้างโครงการทดสอบของคุณขึ้นมาใหม่และการค้นหาการทดสอบจะได้ผล

Btw ฉันสร้างโครงการทดสอบหน่วยใน VS2017 อาจเป็นเรื่องสำคัญเนื่องจากผู้ใช้บางคนกล่าวถึงว่าพวกเขามีปัญหาการค้นพบในโครงการที่ถูกโยกย้ายจาก VS2015 เป็น VS2017


1

การลบ. dll เก่าจะช่วยได้ การล้างไฟล์ temp ที่อยู่ในไดเรกทอรี% TEMP% ที่ C: \ Users (ชื่อผู้ใช้ของคุณ) \ AppData \ Local \ Temp


1

ฉันมีปัญหาเดียวกัน ทางออกของฉันก็โอเค แต่ทันทีที่ฉันเปิดโซลูชันที่ฉันพบว่าการทดสอบหายไป

ในที่สุดฉันก็ลดระดับMicrosoft.VisualStudio.TestPlatform.TestFrameworkและMicrosoft.VisualStudio.TestPlatform.TestFramework.Extensionsแพ็คเกจเป็นเวอร์ชันเก่ามาก (โดยใช้ NuGet manager) และวิธีทดสอบปรากฏขึ้น จากนั้นฉันอัพเกรดเป็นเวอร์ชั่นล่าสุดและยังอยู่ที่นั่น

ดังนั้นเพียงแค่ลดระดับและอัพเกรดแพ็คเกจ


1

ในกรณีของฉันไม่มีความช่วยเหลือใด ๆ ข้างต้นสำหรับฉัน แต่ฉันปรับลดรุ่น NUNit3TestAdapter เป็นเวอร์ชัน 3.8.0 จากนั้นอัปเกรดเป็นเวอร์ชันล่าสุด (3.10.0)


1

บางครั้งการเปลี่ยนเนมสเปซของการทดสอบทำงาน ฉันมีโครงสร้างโฟลเดอร์ดังนี้:

A |___B | |___D |___C___E

เนมสเปซนั้นเรียบเหมือนการทดสอบ <ชื่อ> และไม่ปรากฏในหน้าต่างทดสอบ เมื่อฉันเปลี่ยนเนมสเปซเป็นโครงสร้างของไดเรกทอรีการทดสอบทั้งหมดจะปรากฏขึ้น ตอนนี้ฉันสามารถเปลี่ยนกลับเป็นโครงสร้างเนมสเปซอื่น ๆ ที่ฉันต้องการได้

อย่าลืมที่จะสร้างโครงการของคุณ!


1

ในกรณีของ. NET Framework ในโครงการทดสอบก่อนหน้านี้มีการอ้างอิงถึง DLLs ต่อไปนี้:

Microsoft.VisualStudio.TestPlatform.TestFramework
Microsoft.VisualStudio.TestPlatform.TestFramework.Extentions

ฉันลบพวกเขาและเพิ่มการอ้างอิงถึง:

Microsoft.VisualStudio.QualityTools.UnitTestFramework

จากนั้นการทดสอบทั้งหมดก็ปรากฏขึ้นและเริ่มทำงานในลักษณะเดียวกับก่อนหน้านี้

ฉันลองคำแนะนำอื่น ๆ เกือบทั้งหมดด้านบนก่อนหน้านี้ แต่เพียงอ้างอิงการทดสอบ DLL อีกครั้งก็ใช้ได้ ฉันโพสต์คำตอบนี้สำหรับผู้ที่อยู่ในกรณีของฉัน


1

ฉันกำลังเผชิญปัญหาเดียวกันในกรณีของฉันเพื่อแก้ไข

  1. ฉันเปิดคอนโซลของ windows (windows key + cmd)
  2. นำทางไปยังโฟลเดอร์ที่สร้างโครงการ
  3. ดำเนินการคำสั่ง "การทดสอบ dotnet" โดยทั่วไปแล้วเป็นการทดสอบเดียวกันกับที่ visual Studio ดำเนินการ แต่เมื่อคุณเรียกใช้ผ่านคอนโซลจะช่วยให้คุณเห็นการติดตามที่สมบูรณ์
  4. ฉันได้รับข้อความแสดงข้อผิดพลาด "แอตทริบิวต์ TestClass ที่กำหนดไว้ในคลาสที่ไม่ใช่แบบสาธารณะ MSTest.TestController.BaseTest"
  5. ดังนั้นฉันจึงไปที่กรณีทดสอบและทำเครื่องหมายเป็นสาธารณะสร้างอีกครั้งและการทดสอบของฉันจะแสดงอย่างถูกต้อง

0

ตอนแรกฉันพยายามใช้ MSTest หลังจากนั้นฉันเปลี่ยนเป็นทดสอบ Nunit จากนั้นฉันต้องการสำรอง MSTest ฉันลบรหัส nUnit และการอ้างอิงทั้งหมดออก แต่ Test Explorer ไม่แสดงวิธีการ MSTest การแก้ไข: ฉันลบการอ้างอิง nuget mstest ทั้งหมดและติดตั้งใหม่ เสร็จสิ้น


0

สำหรับฉันแล้วเปลี่ยน TargetFramework ใน.csprojไฟล์ของโครงการทดสอบ

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

ถึง

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

ทำงาน


0

ในกรณีของฉันปัญหาคือประเภทโครงการถูกตั้งค่าเป็น static library (lib) และควรเป็น dynamic library (dll)

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