繁体   English   中英

测试项目引用不存在

[英]Test that Project Reference doesn't exist

我有一个包含多个项目的Visual Studio解决方案。 大多数项目供内部/内部网使用,但一小部分是面向公众的网站。

对于内部项目,我使用带有访问数据库的Entity Framework的ProjectName.Data项目。

对于公共项目,我使用另一种数据访问方法,该方法仅允许按特定模式访问存储过程。

作为集成/系统测试的一部分,我想确保这些公共项目没有ProjectName.Data项目的引用(例如,确保某些开发人员没有说“ 嘿,我们继续,我将添加一个请参考此处和吊杆,方便访问整条船 )。

作为我面向公众的MSTest项目的一部分,我希望能够执行以下操作:

[TestMethod]
[TestCategory("Integration")]
public void CheckNoAccessToDataProject() {
    var ref = ProjectUnderTest.GetReference("ProjectName.Data");
    Assert.IsNull(ref);
}

我确实找到了一种方法,可以使用Type.GetType("Full.Name.To.EF6.Context")来解决这个问题,但是我更愿意检查引用本身。

您可以为此使用罗斯林。 首先安装nuget包Microsoft.CodeAnalysis.Workspaces.Common,然后:

var solutionPath = @"path to your solution .sln file";
var msWorkspace = MSBuildWorkspace.Create();
var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;
var dataProject = solution.Projects.First(c => c.Name == "ProjectName.Data");
var testProject = solution.Projects.First(c => c.Name == "NameOfProjectYouTest");
var hasReference = testProject.AllProjectReferences.Any(c => c.ProjectId == dataProject.Id);

为了解决您所描述的问题,您可能需要考虑一种更好的方法(或可能更容易实现):

1)您可以创建一个自定义的Visual Studio扩展 ,以防止 首先 (无论如何通过UI) 添加此类禁止的引用。

2)您可以在预提交挂钩中检查此类引用(脚本检查.csproj文件中的XML),以便即使添加了它们,也永远不会将其放入源代码管理中 这是GitSVN的可能起点。

3)您可以在代码和请求请求复查中检查它们-这是“过程”解决方案,而不是技术解决方案。 这样,引用可以被检入到开发分支中,但是它们永远不会进入发布分支

4)您可以在构建时使用自定义MSBuild任务 / target捕获它们 这样做的好处是可以说是在理想的抽象级别上进行操作-MSBuild是读取,解析和用于编译项目引用的地方。

5)您可以稍后在测试执行时捕获它们 ,这是您要尝试执行的操作。 我不会说在现阶段检查这些错误很不好, 但是自然地,尽早发现它们更好 ,尤其是在数据公开的风险/成本很高的情况下。

我对Visual Studio对象模型了解不多,但是这里有一些SO问题( #1#2#3#4 )以及MSDN文章可能对这种方法有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM