Why is the Visual Studio 2015/2017/2019 Test Runner not discovering my xUnit v2 tests
.NetVisual StudioUnit TestingVisual Studio-2015Xunit2.Net Problem Overview
UPDATE: Adding a 2019; the discovery/runner integration mechanism is same as per 2017 & 2015, so the key things that can go wrong are the same.
I've read Why is the xUnit runner not finding my tests, which covers reasons xUnit would never be able to find your tests but my problem is different - I'm confident there's nothing subtle going on with my tests; (they have worked in other environments, this seems to be just my machine) - the Visual Studio Test Runner in Visual Studio 2015 [Community Edition] is simply not showing any of my tests. I'm not doing anything remotely exciting; the tests target xUnit.net v2 on the Desktop.
I've looked in the Output window and am not seeing anything in at all under Test in the Show output from tabs.
.Net Solutions
Solution 1 - .Net
-
Eliminate discovery exceptions from your inquiries; go to the output Window (Ctrl-Alt-O), then switch the show output from dropdown (Shift-Alt-S) to Tests and make sure there are no discovery exceptions
-
Test|Test settings|Default processor architecture can help if your tests are x86/x64 specific and discovery is triggering bittedness-related exceptions, i.e. not AnyCpu
-
As suggested in this answer(upvote it if the technique helps) running the desktop console runner (instructions) can be a good cross check to eliminate other possibilities, e.g. mangled config files:-
> packages\xunit.runner.console.2.2.0\tools\xunit.console <tests.dll>
NOTE The xunit.runner.console
package is deprecated - when you get stuff working in VS, you'll be able to have dotnet test
run them in CI contexts too
Go read the documentation - it's comprehensive, up to date, includes troubleshooting info and takes PRs:-
>Important note: If you've previously installed the xUnit.net Visual Studio Runner VSIX (Extension), you must uninstall it first. The Visual Studio runner is only distributed via NuGet now. To remove it, to go Tools > Extensions and Updates. Scroll to the bottom of the list, and if xUnit.net is installed, uninstall it. This will force you to restart Visual Studio.
>If you're having problems discovering or running tests, you may be a victim of a corrupted runner cache inside Visual Studio. To clear this cache, shut down all instances of Visual Studio, then delete the folder %TEMP%\VisualStudioTestExplorerExtensions
. Also make sure your project is only linked against a single version of the Visual Studio runner NuGet package (xunit.runner.visualstudio
).
The following steps worked for me:
- (Only if you suspect there is a serious mess on your machine - in general the more common case is that the visual studio integration is simply not installed yet)
Do the DEL %TEMP%\VisualStudioTestExplorerExtensions
as advised :-
`PS> del $env:TEMP\VisualStudioTestExplorerExtensions`
-
Install the NuGet Package
xunit.runner.visualstudio
in all test projects-
Paket:
.paket\paket add nuget xunit.runner.visualstudio -i
You need to end up with the following in your
paket.dependencies
:`nuget xunit.runner.visualstudio version_in_path: true`
Note the
version_in_path: true
bit is important -
Nuget: Go to Package Manager Console (Alt-T,N,O) and
Install-Package xunit.runner.visualstudio)
Rebuild to make sure
xunit.runner
ends up in the output dir -
-
Close Test Explorer <- this was the missing bit for me
-
Re-open Test Explorer (Alt-S,W,T)
-
Run All tests (Ctrl R, A)
Solution 2 - .Net
None of the above solutions worked for me (dotnetcore 1.1, VS2017). Here's what fixed it:
- Add NuGet Package
Microsoft.TestPlatform.TestHost
- Add NuGet
Package
Microsoft.NET.Test.Sdk
Those are in addition to these packages I installed prior:
- xunit (2.3.0-beta1-build3642)
- xunit.runner.visualstudio (2.3.0-beta1-build1309)
Solution 3 - .Net
I had to change the Test Settings after changing the test projects CPU to x64. Then the tests where detected again.
Solution 4 - .Net
Install xunit.runner.visualstudio
package for the test project
Solution 5 - .Net
Make sure that your test class is public.
Solution 6 - .Net
Follow this steps :
- Update your
MsTest.TestAdapter
andMsTest.TestFramework
dll's
fromnugget package manager
. - Clean your solution
- Build your solution.
Solution 7 - .Net
I've been struggling with this all afternoon whilst working with an ASP Core project and xUnit 2.2.0. The solution for me was adding a reference to Microsoft.DotNet.InternalAbstractions
I found this out when trying to run the test project manually with dotnet test
which failed but reported that InternalAbstractions
was missing. I did not see this error in the test output window when the auto discovery failed. The only info I saw in the discovery window was a return code, which didn't mean anything to me at the time, but in hindsight was probably indicating an error.
Solution 8 - .Net
It's happened to me a couple of times - when I Clean the project and Build it again it tends to be fine.
Solution 9 - .Net
I had the same issue with Visual Studio 2019. Just Installed the following NuGet packages and the issue was solved.
1). xUnit
2). xunit.runner.visualstudio
3). Microsoft.TestPlatform.TestHost
4). Microsoft.NET.Test.Sdk
Solution 10 - .Net
After spending 2 days... none of the above worked for me. The only "solution" was: Go to project properties -> Build Tab. Then click Advanced button on the right bottom corner of the pane. Change "Debug Info:" to "full" and click OK.
Solution 11 - .Net
The reason in my case was the target build was not the same between project debugger and test runner. To unify those elements:
- Test>Test Settings>Default Processor Architecture. then select either X64 or X86.
- Project>(your project)Properties>Build(tab)>platform target.
After they are identical, rebuild your solution then test methods will appear for you.
Solution 12 - .Net
I am using xUnit 2.2.0.
My issue was my solution was not able to find certain dlls and app.config
was trying to resolve them. The error was not showing up in the test output window in Visual Studio.
I was able to identify the error when I installed xunit.runner.console
and tried to run the tests through command line.
Solution 13 - .Net
I can provide a solution for an edge case I ran into a few days ago. It's not gonna be the solution that fits all of the scenarios described above, however, for the edge case I had it fixed it.
I had the same issue with most recent VS 2017 (version 15.5.7) and XUnit 2.3.1. The xunit.runner.visualstudio package was installed, however, the tests didn't show up in VisualStudio's built-in test explorer.
I was working on a legacy project that was targeting .NET framework 4.5. However, beginning with version 2.2. XUnit does not support .NET frameworks lower thant 4.5.2 (see Release Notes - XUnit 2.2: February 19, 2017
Changing the test project's target framework to a version >= 4.5.2 worked for me. You don't have to change the project's version that you're testing, it's just about the test project itself.
Solution 14 - .Net
Ran into a similar problem with VS not discovering test methods. In my case I had the static keyword with the method, which I removed and it worked.
[TestMethod]
Before: public static void Test1()
After: public void Test1()
Solution 15 - .Net
This can also be due to the build check box not being ticked for the current platform project in the build configuration. Click Build | Configuration manager, then make sure the test projects have a tick in the build column for the platform that you're using (for example 'x86').
This was definitely the solution that worked for me.
Solution 16 - .Net
Do make sure that you haven't written your unit tests in a .NET Standard 2.0 Class Library. The visualstudio runner does not support running tests in netstandard2.0 class libraries at the time of this writing.
Check here for the Test Runner Compatibility matrix:
Solution 17 - .Net
There is one other reason that can cause Test Explorer not showing any tests, and it has to do with the new portable .pdb
file format introduced with Visual Studio 2017 / for .NET Core which can break some VS tooling. (Background: See the bug report "Mono.Cecil causes OutOfMemoryException with new .csproj PDBs".)
.pdb
(debug symbols) format?
Are your tests not found because of the new portable -
Open the Output window.
-
Change drop-down selection for Show output from to Tests.
-
If you see output like to the following (possibly repeated once for each of your tests), then you've got the problem described in this answer:
Exception System.OutOfMemoryException, Exception converting <SignatureOfYourTestMethod> Array dimensions exceeded supported range.
If yes, do this to resolve the problem:
- Open your test project's Properties (select the test project in Solution Explorer and press Alt+Enter).
- Switch to the Build tab.
- Click on the Advanced... button (located at the very end of that tab page).
- In the drop-down labelled Debugging information, choose
none
,pdb-only
, orfull
, but NOTportable
. It is this last setting that causes the tests to not be found. - Click OK and clean & rebuild your project. If you want to be extra sure, go to your test project's output directory and clean all
.pdb
files before rebuilding. Now your tests should be back.
Solution 18 - .Net
In my case, I had 2 different test projects in the solution. Project 1 tests could be found, but Project 2 tests could not. I found that first Unloading the test Project 1, then closing VS > clearing my temp files > re-open solution > rebuild, allowed VS to discover my Project 2 tests.
I'm assuming something must be conflicting between the two test projects and this was the quickest way to get me up and running in a few minutes. The kinks can be worked out later :).
Solution 19 - .Net
I was suffering from this problem for long times.
-
I had about 100 projects different version was deployed in different server.
-
Updating xunit from 2.2.0 to 2.3.1 was not a solution because build was failing in 2.3.1.
Then I just updated xunit.runner.visualstudio to 2.3.1 and everything started to work fine. I have used this command in my package manager console to updated my xunit.runner.visualstudio package
Get-Project ComapanyName.ProjectName.*.Tests | Install-Package xunit.runner.visualstudio -Version 2.3.1
Solution 20 - .Net
-
Close all Visual Studio instances
-
Go to %TEMP%\VisualStudioTestExplorerExtensions\
-
Delete specrun related folders
-
Try again
let me know, thanks
Solution 21 - .Net
I hope my answer will be helpful for some of you: In most of the cases when my unit tests were not discovered I had to change the the test class access modifier to public. When add a new class (Shift+Alt+C) the default access modifier is internal and most of the time I forget to change it.
Solution 22 - .Net
The most common culprit for me has been Visual Studio trying to run the tests using a different architecture than the library it's testing. Unfortunately there are multiple places where it seems this can go wrong.
In VS 2017, try creating a Run Settings file, e.g. Default.runsettings
in your test project. If your main lib is x64, the contents should be:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<RunConfiguration>
<TargetPlatform>x64</TargetPlatform>
</RunConfiguration>
</RunSettings>
Then choose this file from Test -> Test Settings -> Select Test Settings File.
Then, under Test -> Test Settings, Default Processor Architecture, choose the correct architecture again.
Be sure to Clean and Build the entire solution. You may need to close and reopen the Test Explorer window. Look for any additional errors in the Output -> Test window, for more clues about incorrect architecture types.
FYI additional Test Settings entries can be found here.
Solution 23 - .Net
Happend to me when i took my first first walking attempts with IntelliTest in VS 2017.
Sometimes, when the test project gets auto-created by IntelliTest, the assembly reference to Microsoft.ExtendedReflection
(...\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\Pex\Microsoft.ExtendedReflection.dll) is missing.
When added, the generated Tests will show up in test explorer after recompile.
Solution 24 - .Net
Disclaimer: it is not about xunit with visual studio 2015, but Visual Studio 2017 with a UWP unit test application (MSTest). I got to this thread searching the same thing so maybe someone else will do the same :)
The solution for me was to update the nuget packages for MSTest.TestAdapter and MSTest.TestFramework. It seems that when you create a unit test app for UWP you don't automatically get the latest versions.
Solution 25 - .Net
My problem was resolved by installing the nuget xunit.runner.visualstudio
Solution 26 - .Net
In my case I have multiple test projects in the same solution, and only one of the projects was not displaying the "Test Explorer"
I went to the "Manage Nuget Package for Solution" by right-clicking on the solution.
I noticed under the "Consolidate" tab there was some "Test" nuget packages that were out of sync between the projects. I clicked on "Install" and my missing tests showed up.
Solution 27 - .Net
I tried most of the suggestions above and nothing worked. In my case, I'm on a team and tests were appearing for other devs for the same solution. So, I attempted just deleting my .vs folder, but no luck there either.
I ended up deleting my local folder entirely and re-cloning the repo. That solved it for me.
Solution 28 - .Net
Here is the solution that worked for us. Not the best but maybe one can benefit.
Background:
- Our scripts were developed with VS 2013 and used NUnit VS Adapter 2.1..
- Recently we migrated to VS 2017 and when open the same solution - test wouldn't show in the Test Explorer
Upon Build we would see this message:
[Informational] NUnit Adapter 3.10.0.21: Test discovery starting
[Informational] Assembly contains no NUnit 3.0 tests: C:\ihealautomatedTests\SeleniumTest\bin\x86\Debug\SeleniumTest.dll
[Informational] NUnit Adapter 3.10.0.21: Test discovery complete
Solution (temporary):
- Uninstall NUnit Adapter 3.10...
- Install NUnit VS Adapter 2.1..
Now the Tests are shown.
Solution 29 - .Net
Also check if a completely empty app.config file (completely blank with absolutely no markup) is within the test project. This was the culprit in my case.
Solution 30 - .Net
In my case, I created a new "Solution Configuration" like shown in the image. So when I select my custom one as "Prod", it doesnt recognize TestMehods for some reason. Changing back to "Debug" solves the problem
Solution 31 - .Net
I don't know if some of you also use JustMock, but I had to disable the profiler in VS 2017 for test detection to work.
Solution 32 - .Net
I had many projects of different type in my solution and I could not run the Xunit test project. I unloaded all of them except my Xunit project and then rebuild the solution the tests appeared in visual studio and I could run them.
Solution 33 - .Net
You need to update your all packages when you are move VS2015 to VS2017 for discover test in test explorer.
Solution 34 - .Net
I Cleared Temp, %Temp% and Prefetch. Then tried reopening VS and was able to find the test methods
Solution 35 - .Net
I have test project A and B. Tests in Project A where discovered but the Discovery never stopped for B. I had to manually kill TestHost to make stop.
I did a lot of things this page describes even to the point that I'm unsure as to wheter this was the solution.
Now it worked and the thing I did was to open the Solution and NOT have the Test Explorer up. Instead I just checked the Output window for Tests and I could see the discovery process end and the number of test where equal to A+B. After this, I opened the Test Explorer and then both A and B where present. So:
Uninstall and Install the latest xUnit stuff correctly. Delete the %temp% as mentioned above, Add NuGet Package "Microsoft.TestPlatform.TestHost" Add NuGet Package "Microsoft.NET.Test.Sdk", restart but only check the Tests Output. If it works u'll see
Solution 36 - .Net
Make your test class as public and add annotation as [TestClass]
Solution 37 - .Net
Right click on Test project and select Properties. Change Target framework property from 1.1 to something else (I used 3.1) and everything will run as 1.1 isnt covered anymore :P
Solution 38 - .Net
Open Outputs -> Tests and see what the error is. In my case, I had this error message:
The framework 'Microsoft.AspNetCore.App', version '5.0.0' (x64) was not found.
After installing .Net SDK 5.0, tests worked immediately: https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.402-windows-x64-installer
Solution 39 - .Net
It was that easy for me - the class which contains the test methods must be public. :)
Solution 40 - .Net
check the type of test.cs files in property window and it is c# compiler. in my case i have accidentally changed it to the embedresource and faced this issue.