gpt4 book ai didi

c# - 在 Visual Studio 包中,我可以模拟 (DTE) GetService(typeof (DTE)) 进行测试吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:14 30 4
gpt4 key购买 nike

在我的包中,我使用 (DTE) GetService(typeof (DTE)) 获取有关当前打开的解决方案的信息。有没有一种方法可以模拟这个以进行测试,特别是这样我就可以使用 dte.Solution.SolutionBuild 进行构建?

主包类中的代码:

var solutionModel = new SolutionModel(((DTE) GetService(typeof (DTE))).Solution);

SolutionModel 类(剥离):

public class SolutionModel
{
private readonly Solution _packageSolution;

public SolutionModel(Solution solution)
{
_packageSolution = solution;
}

public SolutionModel() {} // This constructor is used for tests so _packageSolution will be null

public bool Build()
{
if (_packageSolution != null)
{
var buildObject = _packageSolution.SolutionBuild;
buildObject.Build(true);
return buildObject.LastBuildInfo == 0;
}

return ManualCleanAndBuild(); // current messy alternative way of doing the build for tests
}
}

所以我希望能够在我的测试中使用 _packageSolution 构建而不是 ManualCleanAndBuild()

最佳答案

假设您指的是集成测试(而不是单元测试),您需要在真实的 Visual Studio 实例中加载包,这取决于您使用的测试框架。如果您将 MSTest 与 VSIDE 主机适配器(如果您在向导的最后一页中标记复选框,则包向导创建的集成测试项目)一起使用,则有一个 Utils.cs 文件使用静态 VsIdeTestHostContext 类来获取 DTE实例或服务:

   public static class VsIdeTestHostContext
{
[CLSCompliant(false)]
public static DTE Dte { get; }
public static IServiceProvider ServiceProvider { get; set; }
}

如果你想了解 VS IDE 主机适配器的内部结构,我认为 VS 2008 SDK 是最后一个提供源代码和文档的 SDK (http://msdn.microsoft.com/en-us/library/bb286982%28v=vs.90%29.aspx)

关于c# - 在 Visual Studio 包中,我可以模拟 (DTE) GetService(typeof (DTE)) 进行测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26619463/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com