115
votes

I am in the process of upgrading our existing solution to .Net 4.6.1 and have been unable to get our unit tests to run during a server build. Locally they run as expected and flipping the framework version back to .Net 4.5.1 makes them run again on the server.

I am getting the following error:

No test found. Make sure that installed test discoverers & executors, platform & framework version settings are appropriate and try again.

I have reproduced the problem in a simpler setup:

  • Solution with a single C# Unit Test project with two tests (one failing, one passing).
  • XAML build definition using the Default Template (TfvcTemplate.12.xaml)
  • TFS 2015 Update 1 XAML build server with Visual Studio Enterprise 2015 Update 1 installed (have six similar servers and all produce the same result)
30
According to Brian Harry from Microsoft, this is bug they are currently investigating. It should be fixed in Update 2, and a temporary workaround should be posted later. Source: linkTore Østergaard
I have the same problem for .Net 3.5 SP1 in Visual Studio 2013 Update 5.Andrey Bushman
@AndreyBushman: The error might be in 2013U5 too as it was released together with 2015RTM. But the workaround should work in your case too.Tore Østergaard
I had a similar problem, the workaround was simply in vs, under the test settings, to select the right default processer (32/64) bit, and no keep the engine runnig. (vs 2017.x)kfn

30 Answers

1
votes

This is a known issue for .Net 4.6 now.

Unable to run .Net 4.6.x unit tests as part of a XAML TFS Build with TFS 2015 UPdate1 Source:https://connect.microsoft.com/VisualStudio/feedback/details/2245723

Here is a similar question for you reference: Unable to run .Net 4.6 Unit tests of TFS 2015 XAML build server

69
votes

You can try to change your default processor architecture in your Test Setting from X86 to X64. In my case this was the problem.

This happens if the platform target of your project under test is set to x64.

Screenshot of test settings

52
votes

My build was not finding the tests either. My setup and solution for finding the tests are as follows.

I use VSTS (Visual Studio Team Services) and have a build that is configured to refresh the NUGET packages on every build. I am using NUnit and found that running the following NUGET command (from the package manager console in Visual Studio) to add NUnitTestAdapter library to my test project and the checking in the packages.config made the tests run in my VSTS build.

Install-Package NUnitTestAdapter

As Maurice mentions in the Comment to this post for NUnit3 use the following NUGET package (Look for other utils on the link. i.e: dotnet CLI and Paket CLI)

Install-Package NUnit3TestAdapter

Hope this helps.

37
votes

In my case, I had to:

  1. Convert test project to netcore 2.0 (was netstandard 2.0)

  2. Add nuget package xunit.runner.visualstudio

Reference: http://www.neekgreen.com/2017/11/20/xunit-no-test-is-available/

13
votes

I'm using MSTest. For me, it was version missmatch and missing another dependent package-

1) My package folder contains only MSTest.TestFramework.1.2.1 package. In my project file(.csproj) the reference in Target Name was MSTest.TestAdapter.1.2.0 package which was not present in package folder. My packages.config has also reference of MSTest.TestFramework.1.2.0 .

2) So I installed MSTest.TestAdapter.1.2.0 from nuget package manager and align MSTest.TestFramework version to 1.2.0 in project and package file. Finally I add Microsoft.VisualStudio.TestPlatform.TestFramework and Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions in the reference.

Then everything was OK. Hope this help someone.

11
votes

I got this error and was able to resolve it.

  1. I use Visual Studio Professional 2017
  2. In VS, I navigated to Tools --> Extensions And Updates
  3. At the top of the menu, I'd noticed that my NUnit adapter was disabled
  4. I clicked the [Enable] button
  5. I was able to initiate tests without errors.
6
votes

This problem surfaces for Visual Studio 2017 again. Most likely another bug but the same outcome.

One workaround that seems to work is to uninstall Microsoft Visual Studio 2017 Remote Debugger from the affected machine.

5
votes

I ran into the same problem in VSTS with .Net 4.6.2. If you are seeing this from your VSTS console output, the workaround provided by @Sushil still works in VSTS and is needed. Unfortunately the "Test Assemblies" task provided by Microsoft passes, so you really don't even know there is a problem unless you check the output and find none of your tests actually executed!

VSTS Test Fix

5
votes
  1. Install Nunit and NUnitTestAdapter latest version from NUGET package.
  2. Go to -> Test -> Test Settings -> Default processor architecture -> Change to X64
  3. Build the solution.
  4. This will resolve Run Test and Debugger issue in unit testing and it will start working.
4
votes

I'll throw my solution onto the heap. In my case, I am adding a couple of projects to an existing solution along with Test projects for them. We're using MSTest. There was a previous UnitTest.testsettings file enabled on the solution that was causing compatibility issues.

Clicking on the settings file removed the check and the test run was successful for my tests.

enter image description here

4
votes

If you are running your tests inside docker using multistage building and tests aren't found. Make sure you copy all files not only project files like below Dockerfile section.

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["MainProject/FirstApp.csproj", "MainProject/"]
COPY ["TestProject/*", "TestProject/"]

RUN dotnet restore "TestProject/TestProject.csproj"
RUN dotnet build "TestProject/TestProject.csproj" -c Release
RUN dotnet test "TestProject/TestProject.csproj" -c Release
4
votes

I fixed this problem by reinstalling all testing related NuGet packages for the project: Xunit, Xunit.runner.vistualstudio, Microsoft.Net.Test.Sdk

3
votes

I fixed this by issue in VS 2017 & 4.6.2 test project with the following steps:

  1. Remove references to Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll and extensions
  2. Install the Microsoft.VisualStudio.QualityTools.UnitTestFramework.Updated nuget package
3
votes

Make sure that you've got the "Microsoft.NET.Test.Sdk" nuget installed.

2
votes

This question is obviously being found by people with a range of scenarios, my answer will cover running XUnit tests on a .NET Core project using build pipeline on Azure DevOps but may help others too.

  • Ensure you have the XUnit test adapters installed from nuget as per this answer.
  • In the yaml for your build pipeline, add otherConsoleOptions: '/framework:.NETCoreApp,Version=v3.1' to the inputs of your VSTest@2 step (with the version number set to whatever version of .NET Core you are using). See this documentation for more info.
  • While this is not mandatory, I would recommend also adding failOnMinTestsNotRun: true so that the build pipeline will report a failure if zero tests are run.
  • If you run a build at this point, you may find that your tests run but the pipeline then gives the error The library 'hostpolicy.dll' required to execute the application was not found. You can solve this by changing your filter from the default **\*test*.dllto **\*test.dll (note the removed asterisk), or some other pattern which will match your test project's DLL. The reason for this is that XUnit places a file called testhost.dll in the output directory, as explained in this github issue.

If you are using the older pipelines which do not use yaml, the same options should be available. This answer covers adding the framework, I assume there will also be an option to "Fail the task if a minimum number of tests are not run" or something similar.

1
votes

I was getting a similar issue and noticed somehow an app.config file had been added to my test project. Removing this config file fixed it for me.

1
votes

Using .Net Core with a build pipeline in TFS 2017, my Visual Studio Test step was passing without actually executing any tests. Had to edit the step, "Advanced Execution Options" -> "Other console options" to include:

/framework:".NETCoreApp,Version=v2.0"

(That field also contains /platform:x64)

1
votes

I got this error because my Unit test class was not public.

Ex:

class ClientTests

Error in Output:

...\bin\Debug\Tests.dll] UTA001: TestClass attribute defined on non-public class ClientTests

Correction:

public class ClientTests

1
votes

Found a way! Probably not the most orthodox but it did helped me out in a hurry:

  1. Update the MSTest.TestAdapter and MSTest.TestAdapterFramework packages to the 1.4.0 from the Tools > NuGet Package Manager.
  2. The clean the solution and run the tests again.

I don't think is anything particular with the version, but updating it certainly cleans whatever reference is bad in the solution/project.

1
votes

I use MSTest.

I installed from Nuget the latest version of MSTest.TestFramework and replaced OOB Remove references to Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

Then Installed from neget the latest version of Microsoft.TestPlatform

It allowed me to run test with a command:

".\packages\Microsoft.TestPlatform.16.6.1\tools\net451\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" "UnitTestProject1\bin\Debug\UnitTestProject1.dll" /logger:trx

But I got the same error. The root cause of the error that I didn't specify a test adapter which parses the assembly and finds tests.

Solution:

  1. Install a nuget package "MSTest.TestAdapter"

  2. Specify a test adapter in the end of a command:

    /TestAdapterPath:".\packages\MSTest.TestAdapter.2.1.2\build_common"

1
votes

I faced the similar issue when tried nUnit in VS 2017 and it's not a core project. Installing NUnit3TestAdapter fixed the issue.

1
votes

I solved this issue by installing NUnit3TestAdapter NuGet into my project (https://www.nuget.org/packages/NUnit3TestAdapter/).

dotnet add package NUnit3TestAdapter --version 3.17.0

My .csproj file

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
    <PackageReference Include="NUnit" Version="3.12.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
    <PackageReference Include="RestSharp" Version="106.11.7" />
  </ItemGroup>

</Project>
0
votes

This is just to recap the solution brought forward by @Sushil earlier.

This is a known issue in Team Foundation Server 2015 RTM + Update 1 and will be fixed in Update 2, reference.

There is a workaround described by @Sushil here, which includes adding a .runsettings file that forces the test runner to older .Net framework (please not that you have to specify it through the "Add/Edit Test Run" dialog as adding it directly in the build process editor will be ignored).

0
votes

In Visual Studio 2017 I just uninstall and reinstall NUnitTestAdapter or install new package like NUnitTestAdapter.WithFramework package and problem gone.

0
votes

I am having the same issue. I am using Visual Studio 2017 Community Edition.

enter image description here

I used these steps to successfully discover all my test cases and successfully run it:

  • First go to Extensions and Updates, install NUnit3 Test Adapter. If you already have, just enable it.

  • Restart your Visual Studio 2017, it will automatically prompt to
    install your extension, if a prompt says to end task to continue
    installing, just click "End Task".

  • After that, rebuild your Test Project and all test cases will now be identified and you can now start running your test cases.

0
votes

In my case Reinstalling Nunit3 Adapter, Deleting temp folders, Changing architecture and nothing worked. Its because of the Daemon Resharper caused the problem.

Add or Remove Programs> Find Resharper > Repair > Install again > Restart VS 

That resolves the issues.

0
votes

This error can happen for async tests if you have the wrong return type. The return type should be Task, and not void.

0
votes

After add the TestAdapterPath in the commander, it's worked for me:

vstest.console.exe Xom.Gci.Lvf.FileParserInvoker.UnitTests.dll /TestAdapterPath:"C:\****\****\{SolutionFolder}"
0
votes

In my case the tests were discovered but running resulted in "Test not Available..." and the (in)famous: "Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again."

the error was independent of Visual Studio (tested from dotnet CLI tools and nearly naked UNit test) and it was only when targeting .NET 4.7.1. dotnetcore app works fine.

also running tests with the Nuint3 CLI nunit3-console.exe Tests.csproj shows the error:

"Either assembly contains no tests or proper test driver has not been found."

the error was because the test-adapter could not be found on a (mapped) network drive or share and was solved by copy it locally and rerun.

0
votes

Try running vstest.console.exe with --diag:diag.txt and inspect the output. For me it was DLL load failures for test adapters from my working directory:

TpTrace Information: 0 : 14976, 1, 2020/03/10, 15:34:22.120, 57158093583, vstest.console.exe, AssemblyResolver.OnResolve: Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter: Failed to load assembly. Reason:System.IO.FileLoadException: Could not load file or assembly 'file:///C:\Directory\Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)

File name: 'file:///C:\Directory\Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.

I worked around this by adding <loadFromRemoteSources enabled="true"/> under <runtime> in vstest.console.exe.config