147

I have a simple solution in visual studio 2013 that is composed by one web project, one library project and one unit test project. When I open the solution and try to run the unit tests they are not discover by visual studio. To run the tests I try to go to the menu and choose Test -> Run -> Run all tests or by opening the test explorer window. By those to methods visual studio doesn’t discover any tests in the solution.

Creating first a simple unit tests project and try to run the test, visual studio know discover the test and I can run it. Then, if I open my previous solution visual studio now discovers all the tests. I try to save my solution but closing it and reopening, without creating a unit test project first, the visual studio doesn’t find the tests again. This is a very strange behave that I don’t know why this is happening.

I used to working alone in this project that was using the source control git integrated with the visual studio team foundation. The problem of visual studio not discover the unit tests start when a new element came to the project and when I need to recreate the solution through the source control online. Before this, all tests always been discovered by visual studio.

For creation the unit tests I use the dll Microsoft.VisualStudio.QualityTools.UnitTestFramework. My version of visual studio is: Microsoft Visual Studio Express 2013 for Web Version 12.0.30723.00 Update 3. My version of .net framework is 4.5.50938.

All of my tests are like this:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}
11
  • 2
    Are these Async based Unit tests? Commented Aug 14, 2014 at 9:20
  • Not sure what the issue was, but running as administrator fixed the issue for me. Commented Aug 14, 2014 at 9:29
  • All sync based unit tests Commented Aug 14, 2014 at 10:31
  • 2
    Have you tried an external test-runner (like ReSharpers or NCrunch)? Maybe your install is bugged (so reinstall VS)
    – Random Dev
    Commented Aug 14, 2014 at 10:44
  • 1
    None of these fixed the issue for me :( What a disaster. I've given up NUnit and am relying on UnitTestFramework - bizarrely the opposite problem from the OP
    – Adam
    Commented Sep 21, 2016 at 8:30

38 Answers 38

211

Some things I've noticed I have to do from time to time to get tests to show up properly.

  1. If your solution is in a protected drive that you need administrator access to read/write, sometimes only a portion of the tests come up. Definitely run VS as administrator in that case.

  2. If your solution is 64 bit, make sure that Test > Test Settings > Default Processor Architecture is set to x64. Sometimes it gets set to x86. Set it to x64, then rebuild.

  3. Sometimes just restarting Visual Studio does the trick because the test explorer will start up again.

  4. Don't forget to actually build the test project/solution. (If you want it to get built with the rest of the projects, right-click on your solution > Properties > Configuration Properties > Configuration > check the "Build" box for your test project)

  5. Ensure the tests are in a public section of your test class

16
  • 34
    I realize this answer is a little late, but my Google search brought me here, and nothing mentioned solved my problem. Eventually I figured out it was #2 in my list, so I wanted to leave that knowledge, plus the other tricks I've picked up over time.
    – AndyG
    Commented Mar 18, 2015 at 18:50
  • 7
    A combination of #2 and #3 did it for me. Visual Studio complained about a number of (non-test) projects in my solution being excluded from the test discovery step because they were built for x86, but that was fine. Commented Jul 16, 2015 at 14:52
  • 4
    I found that my settings were all correct and restarting did not work. What did fix the problem for me was simply building the solution. I know this may seem dumb but it is not obvious that is necessary; I have not seen any of the official docs mention this step. Commented Jul 20, 2015 at 18:19
  • 6
    I had the same problem in VS2015. #2 fixed the problem for me.
    – mcolegro
    Commented Nov 6, 2015 at 17:09
  • 2
    I have no idea why people pay so much money for a product that fails so often. I had to upgrade my project to 2015 and do #3 2 times before it discovered my test. Commented Jan 6, 2016 at 7:50
82

If you using NUnit, make sure to download NUnit Adapter first.

Go to Tools → Extensions and Updates… → Online → search for "NUnit Test Adapter".

5
  • 2
    I'm using UnitTests from Microsoft. In this case I suppose that isn't necessary install anything. Commented Jun 23, 2015 at 8:49
  • 1
    This did it for me - much obliged. Commented Dec 7, 2015 at 8:13
  • That fixed it for me. Thanks.
    – jjthebig1
    Commented Feb 8, 2017 at 15:27
  • Upvoted as did resolve issue but is it necessary to have NUnit adapter or should Visual Stdio work with NUnit out-the-box. Commented Mar 20, 2017 at 8:49
  • You are a god sir.
    – Nox
    Commented Apr 28, 2017 at 16:03
61

Make sure your test class is public so it can be found. And if you're referencing another class, make sure of the same.

Also, sometimes if you have no Asserts or you're not decorating the test with a [TestMethod], a test might not be recognized.

2 more things: 1) Async unit tests act funny at best, and none at all at worst. Have a look at this article by Stephen Cleary and keep from there if it interests you.

2) If you use NUnit and you run into the same issues, keep in mind it's [TestCase] for Nunit, instead of [TestMethod]

Having said the above, here's an article I've posted on the code project, with both MSTest & NUnit, in case you want to give it a spin and make sure you're not missing anything.

11
  • 1
    All of my tests are like this: [TestClass] public class ServicesUtilsTest { [TestMethod] public void Test1() { Assert.IsTrue(True); } } Commented Aug 14, 2014 at 9:40
  • this is not very clear . Put it in a code block in your question, so it can be understood :)
    – Noctis
    Commented Aug 14, 2014 at 9:45
  • All my tests is for sync code, and I think my problem is not in the unit tests code but more in visual studio sometimes not discovering the tests. Commented Aug 14, 2014 at 10:30
  • Try using this instead: using Microsoft.VisualStudio.TestTools.UnitTesting;
    – Noctis
    Commented Aug 14, 2014 at 10:33
  • 1
    I am already using Microsoft.VisualStudio.TestTools.UnitTesting. This namespace are defined in the dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll Commented Aug 14, 2014 at 10:44
28

I had the same issue but none of the other solutions worked. Turns out that I was using the NUnit 3 framework with the 2 adapter.

If you're using NUnit 3, go to Extensions and Updates and install the NUnit3 Test Adapter.

6
  • It does say this in the description of the Nuget package. But if you're like me and don't read, I'm hoping that this will help: "This package includes the NUnit 3.0 framework assembly, which is referenced by your tests. You will need to install version 3.0 of the nunit-console program or a third-party runner that supports NUnit 3.0 in order to execute tests. Runners intended for use with NUnit 2.x will not run 3.0 tests correctly."
    – Frank
    Commented Jul 22, 2015 at 22:31
  • In my case I knew it had something to do with the NUnit3 update, but one set of my test passed and the others weren't seen. Upon closer inspection there were a lot of exceptions in the output, even though the tests all passed. Commented Nov 17, 2015 at 14:00
  • This was the case for me too. I had run nuget "update-package" without realizing it updated from NUnit 2.x to 3.x.
    – Jens
    Commented Dec 21, 2015 at 8:15
  • Currently the NUnit 3.0 Test Adapter can't be found via NuGet (see the NUnit 3.0 Wiki). It can stil be installed as an extension though. Commented Mar 8, 2016 at 16:17
  • 1
    Thanks a lot Frank. It solved my issue. Now I am able to see the unit test results in the console window :) Commented Jun 4, 2016 at 19:04
12

I'm having this issue from time to time. What works for me is to shutdown Visual Studio and go to folder:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

and delete it content.

Once you open Visual Studio and load your project again Test Explorer should contain back your tests

4
  • For me that doesn't work. I am using Visual Studio 2013 Express with update 5 install recently. Still no unit tests appearing. Commented Jul 24, 2015 at 13:31
  • This was also what worker for me. Even worked without restarting visual studio. Hours down the drain finally had an end. Commented Jan 18, 2017 at 11:05
  • This directory does no longer exist in VS2017. Commented Oct 24, 2017 at 9:15
  • Thanks it works for me for any of those this folder can have diffrent version depending on the installation of visual studio like for me it is %LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache Commented Feb 10, 2020 at 7:03
12

XUnit users may notice Test Explorer window no longer lists any tests. To make tests discoverable again try this important tip, highlighted below.

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).

Type in TEMP to find target folder

2
  • This didn't work for me. Test explorer just does not find my test and as far as I can tell I'm not doing it wrong and I've tried some of the solutions here without success.
    – Skystrider
    Commented Oct 3, 2017 at 23:02
  • Using MsTestV2 - this was the only thing that fixed the problem
    – Nathan
    Commented Nov 8, 2018 at 19:54
5

For future googlers I had a rare scenario that caused this.

On my base test class I had a property named TestContext. This interfered with MSTest's reserved TestContext property causing all my tests to be hidden from VS/Resharper except one (which did not inherit from the base).

1
  • 1
    got me too! i forgot to make the test context property public.
    – escape-llc
    Commented Aug 10, 2016 at 13:59
4

for me it was changing 'solution configurations' to Debug (instead of Release).

0
4

My problem was because my unit test method wasn't void, and it was receiving parameters.

1
  • Of all the things.... This was my problem and the params bit makes sense. After all, what would the test system know to pass in? The solution there is to make a test method where you manually call the method you want to test. If you're testing a WebAPI project and have a Get with params, you still have to have the matching Get call but it won't show up in explorer. Commented Mar 22, 2016 at 19:26
4

I have found that unit test methods marked as async void aren't discovered by the VS Test Explorer. This seems to be because VS would not have any way to wait for a test to finish and decide if it succeeded or not. If you absolutely need to have a test method to run asynchronously then get it to return a Task instead like async Task. I found that this fixed the issue for me.

1
  • 1
    This does not answer the question above, but this is exactly the problem I was trying to solve. So you got accident +1 :) Thank you so much!
    – C-F
    Commented Jul 29, 2016 at 9:06
3

Try building all projects as MSIL (Any CPU) instead of x86/x64. Worked for me strangely

2
  • I just had to build the Test project using Any CPU, the other projects remained x64 Commented Dec 20, 2015 at 12:02
  • 1
    Technically, C#/VB.NET always compile to MSIL. The project setting "x86", "x64" or "Any CPU" (and, in newer versions, "Prefer 32-bit") is just flags at the top of the EXE/DLL. Point still stands, though; NUnit won't list tests it can't load into the execution engine, on account of them being marked as requiring a particular architecture to run. Commented May 11, 2016 at 20:11
3

While AndyG's solution works, a more lasting solution could be to set the PreferredToolArchitecture environment variable to "x64", either by:

How to make Visual Studio use the native amd64 toolchain

or by:

  • Control Panel | System and Security | System | Advanced System Settings|Environment Variables
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64
2

I was facing the same problem and I've remembered, again (this situation happened before), that selecting "Mixed Platform" on the solutions platform menu works, as well as the other answers.

1
  • But where is the solutions platform menu? Is that in Visual Studio? I'm using Visual Studio Express 2013 for Web and I can't find that menu. Commented Jul 24, 2015 at 13:23
2

I'd managed to add mine as

public static void TestMethod1(){}

started working once I removed static....

2

Go to Nuget package manager and download Nunit Adapter as follow. enter image description here

1

go to the project menu > Configuration Manager check your test project platform matches the rest of the project and is check to build then rebuild.

2
  • 1
    I don't have any Configuration Manager option in my project menu. I can only find the project properties option. I very the platform of the unit tests project and it is the same of the others projects. So, for me this solution doesn't work. Commented Aug 24, 2015 at 13:42
  • Define "matches the rest of the project"
    – amalgamate
    Commented Nov 18, 2015 at 20:59
1

Just ran into this as well as I didn't see a similar case that was similar to mine.

In the .csproj file of my test project, NUnit reference privacy was set to False:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

After I set <Private> to True it worked.

1

You just need to install this package only:

NUnit TestAdapter NUnit TestAdapter

1
  • I known that using another unit test framework will resolve my problem. But if I wanted continuing use the Microsoft Unit Tests framework that is not a solution. Commented Jan 26, 2016 at 9:34
1

To get tests to show in the Test Explorer Window I had to install NUnit3 Test Adapter 3.0 which was not available in Package Manager.

Downloaded from https://visualstudiogallery.msdn.microsoft.com/0da0f6bd-9bb6-4ae3-87a8-537788622f2d

1
  • I'm using UnitTests from Microsoft. In this case I suppose that isn't necessary install anything. Commented Feb 22, 2016 at 9:18
1

I had the exact same problem.

It was due to incompatible version of NUnit I'd added to my project (3.2.0) and the Test Adapter I had installed (2.0.0).

To fix, use "Tools > Extensions and Updates" and search for NUnit3 Test Adapter, it discovered my tests after that.

Cheers

1
  • I am not using NUnit. Commented Mar 15, 2016 at 17:14
1

Let's just say for argument's sake that you need to use X64 architecture on your test project in order for the dependencies to build properly (as in my case). You may need to modify your Default Processor Architecture under the Test--Test Settings menu. Setting this to X64 allowed my test explorer to find my tests using Microsoft.VisualStudio.TestTools.UnitTesting.

1

Sorry for adding to the long list, but I had a completely a different problem. First, I would like to mention I discovered my issue when clicking 'Run All' in the Test Explorer and then watching the build output window in Visual Studio. You have to actively watch it, as afterwards the message disappears.

As for the issue, it looks like during the scanning of the tests, the DLL gets loaded and its test types are enumerated. This causes the references to be loaded and if any failure occurs during this process, the tests will not be shown in the explorer. I had two issues preventing the test DLL to be successfully loaded:

  • There was still a binding redirect left in the config file (redirecting to a version lower version NHiberate than what was referenced in the test project).
  • A conflicting assembly reference (2nd level references not being able to load). AsmSpy is btw a great tool to hunt for these.
1
  • I was facing the same issue , had a hard time in finding which dlls were not loading.... Commented Oct 14, 2016 at 10:34
1

If you load a Visual Studio (VS 2015 Community in my case) solution from a network share or My Documents directory that is part of a share, you will get into this trouble. I solved it by moving the solution and its underlying projects to a local folder.

1

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.

Here are the screen shots: enter image description here

enter image description hereenter image description here

0

I came across the same issue. And investigated and found that the dll's were not build, and put in the right folder. as soon as I changed my configuration they appeared. - the Projects build options, what folder should be used? - the build menu entry build configuration, they should be checked.

that fixed it for me.

2
  • For me, the dll's for the tests also weren't build because visual studio doesn't find any defined tests. I'm using Visual Studio Express and I don't have the Build menu entry. But in my configuration manager I have all build options checked. So, I think that is no the problem for my case. Commented Sep 4, 2015 at 13:41
  • @miguelbgouveia, it's the other way around - VS builds DLLs, and then scans those for tests. So if you have no test project DLLs, you will definetely find no tests.
    – user3638471
    Commented Feb 22, 2016 at 13:09
0

For the Visual Studio 2013.5, clearing the \TestResults directory in the solution helped. Visual Studio corrupted the mdf file in which it stores the discovered tests, thus preventing the discovery of unit tests.

1
  • 1
    It's in the solution of your project. Right-click your project file in the Solution Explorer -> Open Folder in File Explorer. Go one directory up from there and delete the /TestResults directory. You may have to shut down Visual Studio to delete everything. It will rebuild the directory the next time the project is opened.
    – MartijnK
    Commented Sep 23, 2016 at 12:53
0

Be sure your all projects are runing with the same configuration. Under your project's Properties => Debug => Platform in drop down list choose the appropriate platform (for me it was "Any CPU") as determined at your other projects.

0
  • I know that the unit tests are not found if the solution is not built, so that is something to try (Build the solution), but that solution is like the help desk asking if your computer is plugged in...
  • After a clean rebuild did not fix the problem for me, running a full batch build did fix it.
0

Had the same issue; tests suddenly stopped being discovered.

Nunit Test Adapter had become disabled somehow. Clicking enable in the extension manager fixed it for me.

0

I had the same problem until I realized I made a cut/paste error and left off [Test Method] before the test.

1
  • That already happen to me. But in this they that is not the case. Commented Mar 1, 2016 at 17:06

Not the answer you're looking for? Browse other questions tagged or ask your own question.