3
votes

I want' to create a protractor test adapter for Visual Studio. I have found I can create it with implementing ITestExecutor and ITestDiscoverer.
I follow the Marcel De Vries documentation (https://xpirit.com/wp-content/uploads/2016/03/Xpirit-magazine-2-Protractor-UI-testing.pdf) but I can't found how to add my extension in Visual Studio.

  • I have tried to add my assembly directly in the \Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions folder.
  • I have tried to create a Vsix and install it. (with UnitTestExtension as Asset)
  • I have tried to download Marcel's project (https://github.com/XpiritBV/ProtractorAdapter) compile and install it.

It's not work, the command "vstest.console.exe /listdiscoverers /UseVsixExtensions:true" doesn't list my discoverer. And JS tests don't found by VS.

What i'm doing wrong ?

2
Read up on creating VSIX projects.JWP
Ok, i have found why vstest don't work. A very ugly mistake of my. I have been in the wrong visual studio folder. I'll continue to understand the Microsoft Test implementation.Cedric
If anyone struggles with VS 2017, the correct path to put your adapter in is Common7\IDE\Extensions\TestPlatform\Extensions.Grx70

2 Answers

14
votes

The documentation is very poor for creating test adapter for VS. There are many URL that can help to understand how implement UTE with JS automated test :

In summary :
Step 1 :

  • we need to implement ITestExecutor to launch test with protractor prompt command and return the result.
  • we need to implement ITestDiscoverer to parse file in argument to find all tests inside.

You can test this primary version without VSix : Go to Visual studio Test extension folder (C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions for VS 2013) and add your DLL and dependencies. Try to launch tests with commands like that in windows command prompt :

cd C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow  
vstest.console.exe "c:\test\test.js"

Step 2 :
By default Visual Studio only parse .dll and .exe files. If you want to parse another file type (.lua, .js, ...) you need to create a parser who explicitly browse source files and find all tests.
You need to create implement two Interfaces :

  • ITestContainerDiscoverer
  • ITestContainer

This project (https://github.com/XpiritBV/ProtractorAdapter) will be useful to understand how implement that and how adapt your code to subscribe on any changes in your project (Add file, Edit file, Project Load, etc.).

Important : You need to create a VSix project to test that ! If not, Visual Studio don't load your TestContaineDiscoverer.

Important 2 : When you create a VSix file, you need to explain two Assets :

  • Type : Microsoft.VisualStudio.MefComponent / Path : |YourProject|
  • Type : UnitTestExtension / Path |YourProject|

Hope it's help somebody.

4
votes

If you need to run the test adapter with vstest.console.exe but don't need visual studio integration you will need to do the following:

  • Create a project that is a class library
  • Very important: The assembly name must end with .TestAdapter or vstest.console.exe will not recognize your test adapter. You can change this setting in the properties of your project.
  • Import Microsoft.VisualStudio.TestPlatform.ObjectModel which for me was located at C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll
  • You only need to implement ITestDiscoverer and ITestExecutor
  • If your test adapter is for .dll or .exe files the default test adapter will run first. I could not find a way to disable this.

The above accepted answer and code was very useful for me when figuring out how to create a test adapter. Be aware that if you are creating a VSIX then the asset type UnitTestExtension is not available in the list but seems to work and can be added in the .vsixmanifest file manually.

Additional useful links: