有没有办法在visual studio扩展中订阅Test Explorer事件? 我没有在DTE2界面中找到类似的东西。我的目标是在测试运行完成时从扩展中触发一些功能(对于从测试资源管理器运行的测试)
谢谢!
答案 0 :(得分:5)
感谢280Z28的回答。使用应用程序对象DTE工作代码:
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.TestWindow.Extensibility;
using Microsoft.VisualStudio.ComponentModelHost;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.TestTools.Execution;
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
Microsoft.VisualStudio.OLE.Interop.IServiceProvider InteropServiceProvider = application as Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
_ServiceProvider = new ServiceProvider(InteropServiceProvider);
_ComponentModel = (IComponentModel)_ServiceProvider.GetService(typeof(SComponentModel));
_OperationState = _ComponentModel.GetService<IOperationState>();
_OperationState.StateChanged += _OperationState_StateChanged;
}
void _OperationState_StateChanged(object sender, OperationStateChangedEventArgs e)
{
}
也可以通过ITestsService访问当前发现的测试。
_TestsService = _ComponentModel.GetService<Microsoft.VisualStudio.TestWindow.Extensibility.ITestsService>();
var GetTestTask = _TestsService.GetTests();
GetTestTask.ContinueWith(Task =>
{
var DiscoveredTests = Task.Results.ToList();
});
答案 1 :(得分:4)
您需要的接口可通过MEF在 Microsoft.VisualStudio.TestWindow.Interfaces.dll 程序集中获得。
您需要通过MEF和[Import]
IOperationState
实例公开您的扩展程序,或使用IComponentModel
接口(为SComponentModel
服务返回)来访问{ {1}}。从那里,您想要为IOperationState
事件添加事件处理程序,并查找IOperationState.StateChanged
属性以包含State
标记。
我非常抱歉缺少链接,但我在MSDN中找不到任何相关信息。
编辑:有关兼容性的两条评论。
TestOperationStates.TestExecutionFinished
。这意味着您将被迫部署 Visual Studio 2012和Visual Studio 2013的单独扩展,或者“动态”加载扩展代码的方式“聪明”(后者超出了这个答案的范围,但我在某些情况下使用它类似于继承保证金扩展,需要访问特定于版本的IntelliSense资源。)样本VS 2017
使用MEF和ITestContainerDiscoverer导出类型的示例。但请注意,这可能在VS 2019中消失了!
bindingRedirect
这里可以找到更多的东西 https://www.fuget.org/packages/Microsoft.VisualStudio.TestWindow.Interfaces/