如何让Visual Studio测试窗口使用我的TestContainers Discoverer?

时间:2014-02-08 12:43:47

标签: c# .net visual-studio visual-studio-2013

我正在尝试为Visual Studio 2013编写测试适配器(我使用Update 1运行Premium,并且安装了VS SDK,因此我可以引用所有VS DLL)。因为它可以解决原始内容文件而不是编译的dll / exe,所以我似乎需要创建一个ITestContainerDiscoverer

我在网上发现了一些似乎实施了这些的公共回购;例如:

TypeScriptJsonNodeand many more

然而;我的代码似乎是相同的(和VS DLL相同的引用),但似乎永远不会触发。我放了File.Write,Console.WriteLine,Debuuger.Launch,还附加了另一个VS实例。这是我班级目​​前的样子:

[Export(typeof(ITestContainerDiscoverer))]
public class MyTestContainerDiscoverer : ITestContainerDiscoverer
{
    [ImportingConstructor]
    public MyTestContainerDiscoverer([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider)
    {
        File.WriteAllText(@"M:\Coding\Applications\LuaTestAdapter\LuaTestAdapter\bin\Debug\Danny.txt", "TEST!");
        Console.WriteLine("IT'S RUNNING!");
        Debugger.Launch();
    }

    public Uri ExecutorUri
    {
        get { return TestExecutor.ExecutorUri; }
    }

    public IEnumerable<ITestContainer> TestContainers
    {
        get
        {
            return new[] {
                new TestContainer(this, @"M:\TestProject\Test.lua")
            };
        }
    }

    public event EventHandler TestContainersUpdated;
}

我在一个以.TestAdapter.dll结尾的DLL中构建它,然后手动将其复制到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions然后启动VS. VS正确加载TestAdapter,因为在同一个项目中,我的TestDiscoverer(当前包含DLL作为调试扩展)正在输出到控制台:

[FileExtension(".lua")]
[FileExtension(".dll")]
[DefaultExecutorUri(TestExecutor.ExecutorUriString)]
public class TestDiscoverer : ITestDiscoverer
{
    public void DiscoverTests(IEnumerable<string> sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink)
    {
        logger.SendMessage(TestMessageLevel.Informational, "This one works!");
    }
}

所以我认为TestContainerDiscovered一定有问题;但我在网上发现的样本中看不到任何不同的东西:O(

2 个答案:

答案 0 :(得分:6)

看起来我可能找到了不同之处...如果我创建一个Visual Studio Package项目并安装我的TestAdapter&#34;旧方式&#34;,那么我的代码执行正常。

看起来像#34;正常&#34; TestAdapters(例如那些使用编译DLL / EXE,因此可以使用提供的TestContainerDiscoverers)工作正常(这就是为什么NUnit,xUnit等可以使用基于NuGet的包,或者将DLL复制到Extensions文件夹中),但是为了得到我的为了工作,我需要通过一个Package项目安装它,其中包含以下内容&#34; Asset&#34;包括(可能是因为使用MEF连接ITestContainerDiscoverer)。

<Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="LuaTestAdapter" Path="|LuaTestAdapter|" />

答案 1 :(得分:3)

默认情况下,Visual Studio似乎只在.exe.dll中找到测试发现者。

因此,当您想要扩展(例如.lua)时,您还需要实现这两个接口:

  • ITestContainer
  • ITestContainerDiscoverer

还有标准的:

  • ITestDiscoverer
  • ITestExecutor

要测试它是否会运行,您可以执行以下命令:

cd Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow

vstest.console.exe /listdiscoverers /useVsixExtensions:True

如果输出如下内容:

typescript testadapter

这意味着您的发现正在加载。由于它是一个具有不同文件扩展名的新文件,我猜你不能只复制文件,我想它需要安装。

当我创建此适配器时,我复制了此example provided by Microsoft中的所有内容并对其进行了修改。确保您的vsixmanifest看起来相同......

除了例子,我没有找到任何实际文件......

希望这有所帮助...