gpt4 book ai didi

c# - 单元测试应用程序_开始

转载 作者:可可西里 更新时间:2023-11-01 03:11:08 24 4
gpt4 key购买 nike

我正在寻找有关如何对 Global.asax 中的 Application_Start 方法进行单元测试的任何类型的信息(最好是 Moq)。我正在使用 ASP.NET MVC 并试图达到难以捉摸的 100% 代码覆盖率!

我使用 MVC 的事实不是重点。并且说没有必要测试 Start 也不是真正的答案。如果我在那里有其他代码怎么办?我需要知道如何测试它。

最佳答案

一些组织确实需要那些毫无意义的数字,并且存在超出成本的问题。对于处理敏感信息的公司来说,“足够好”还不够好。我遇到了完全相同的问题,就像 Klas Mellbourn 一样,需要达到 100%(如果不是更高的话!)以下对我有用。虽然,我更愿意将其标记为“从代码覆盖范围中排除”

public class Global : HttpApplication
{
public override void Init()
{
AreaRegistration.RegisterAllAreas(); //will error out on app_start
base.Init();
}

/// <summary>
/// Application_Start method.
/// </summary>
/// <param name="sender">The caller</param>
/// <param name="e">The event arguments</param>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "KMM: This method is called dynamically by the framework.")]
protected void Application_Start(object sender, EventArgs e)
{
var container = StructureMapRegistry.Initialize();
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapResolver(container);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}

然后单元测试看起来像这样:

 public class GlobalTest : Global
{
private HttpRequestMessage FakeRequest;

DateTime? effectiveDate = DateTime.Now.AddYears(-4);
private string policyNumber = "1234567890";

[TestMethod]
public void ApplicationStart()
{
var sender = new object();
var e = new EventArgs();
try
{
Application_Start(sender, e); // this will error b/c not fully loaded yet.
}
catch (InvalidOperationException)
{
Thread.Sleep(2000); // give the app time to launch

Application_Start(sender, e);
}
Assert.IsTrue(true);
}
}

最后,我需要在我的 WebApiConfig 中设置一个标志,以防止路由被注册两次。

 public static class WebApiConfig
{
private static bool isRegistered;
/// <summary>
/// Registers the configuration.
/// </summary>
/// <param name="config">The Http Configuration.</param>
public static void Register(HttpConfiguration config)
{
if (isRegistered)
{
return;
}
config.MapHttpAttributeRoutes();

现在,在仇恨者和纯粹主义者开始标记之前,任务是测试所有代码。我个人讨厌修改代码以适应测试。这与使代码可测试不同。添加 isRegistered 标志是支持需要调用 app_start 2x 的测试所必需的工件类型的示例。这是一件小事,因为该代码仅在 app_start 上被调用,所以我不会对它大惊小怪。我当然会对其他人在这方面所做的事情感兴趣。

关于c# - 单元测试应用程序_开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372003/

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