我一直在擺弄頂級陳述句作為簡單控制臺應用程式的入口點,因為新的 .NET 6 模板將它們用作默認值。
然而,正如語言規范非常清楚地指出的那樣:
請注意,名稱“Program”和“Main”僅用于說明目的,編譯器使用的實際名稱取決于實作,型別和方法都不能通過源代碼中的名稱參考。
那么,如果我不能參考隱式Program類及其Main()方法,是否可以撰寫單元測驗來檢查頂級陳述句本身的執行流程?如果是這樣,怎么做?
uj5u.com熱心網友回復:
是的。一種選擇是使測驗專案的內部結構對測驗專案可見,例如通過向 csproj 添加下一個屬性:
<ItemGroup>
<InternalsVisibleTo Include ="YourTestProjectName"/>
</ItemGroup>
然后Program為頂級陳述句生成的類應該對測驗專案可見,您可以通過以下方式運行它:
var entryPoint = typeof(Program).Assembly.EntryPoint!;
entryPoint.Invoke(null, new object[] { Array.Empty<string>() });
這樣的東西在內部用于以最小的托管模型執行ASP.NET Core 6 的集成測驗。
請注意,如果您在頂級陳述句中使用's,則生成的Main方法可以回傳任務await,因此您可能需要捕獲回傳entryPoint.Invoke并測驗它是否為 aTask和awaitit。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/407217.html
標籤:
