有沒有辦法在Visual Studio擴展中訂閱測試瀏覽器事件? 我在DTE2界面沒有找到類似的東西。我的目標是在測試運行完成時(對於從測試瀏覽器運行的測試)從擴展中觸發某些功能在Visual Studio擴展中接收測試運行開始/結束DTE2接口
謝謝!
有沒有辦法在Visual Studio擴展中訂閱測試瀏覽器事件? 我在DTE2界面沒有找到類似的東西。我的目標是在測試運行完成時(對於從測試瀏覽器運行的測試)從擴展中觸發某些功能在Visual Studio擴展中接收測試運行開始/結束DTE2接口
謝謝!
你需要的接口都可以通過在Microsoft.VisualStudio.TestWindow.Interfaces.dll裝配MEF。
您需要通過MEF和[Import]
的IOperationState
一個實例揭露您的分機,或使用IComponentModel
接口(用於SComponentModel
服務返回)訪問IOperationState
。從那裏,您想要爲IOperationState.StateChanged
事件添加事件處理程序,並查找State
屬性以包含TestOperationStates.TestExecutionFinished
標誌。
我非常抱歉缺少鏈接,但我在MSDN中找不到任何有關此信息。
編輯:關於兼容性的兩點評論。
bindingRedirect
。這意味着您將被強制部署單獨的擴展名Visual Studio 2012和Visual Studio 2013,或者獲得關於動態加載擴展代碼的方式的「聰明」(後者遠遠超出了這個答案的範圍,但是我已經將它用於某些情況,如需要訪問版本的繼承邊距擴展特定的智能感知資源)。感謝您的答案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();
});
這還沒有完全回答OP的問題 – djv
@Verdolino爲什麼不呢?在OperationState_StateChanged事件中,可以檢查e.State == TestOperationStates.TestExecutionFinished。 – JoanComasFdz
@JoanComasFdz正好。答案中缺少這一點。 – djv
感謝您的答案。寫了一篇關於如何做到這一點的小貼子。 – vmg