我正在尝试为Visual Studio 2013编写测试适配器(我使用Update 1运行Premium,并且安装了VS SDK,因此我可以引用所有VS DLL)。因为它可以解决原始内容文件而不是编译的dll / exe,所以我似乎需要创建一个ITestContainerDiscoverer
。
我在网上发现了一些似乎实施了这些的公共回购;例如:
TypeScript,Json,Node,and 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(
答案 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
)时,您还需要实现这两个接口:
还有标准的:
要测试它是否会运行,您可以执行以下命令:
cd Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow
vstest.console.exe /listdiscoverers /useVsixExtensions:True
如果输出如下内容:
这意味着您的发现正在加载。由于它是一个具有不同文件扩展名的新文件,我猜你不能只复制文件,我想它需要安装。
当我创建此适配器时,我复制了此example provided by Microsoft中的所有内容并对其进行了修改。确保您的vsixmanifest
看起来相同......
除了例子,我没有找到任何实际文件......
希望这有所帮助...