簡體   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