您可以在 Visual Studio 中记录访问的方法吗?

Posted

技术标签:

【中文标题】您可以在 Visual Studio 中记录访问的方法吗?【英文标题】:Can you record accessed methods in Visual Studio? 【发布时间】:2012-10-02 14:43:57 【问题描述】:

我正在为一些 C# 代码追溯记录和编写单元测试。我想确定实际使用了什么代码以及何时使用。

在 Visual Studio 2012 中,有没有一种方法可以在遍历特定场景时记录所有访问的方法以及以什么顺序?

【问题讨论】:

【参考方案1】:

您可以运行您的应用程序并附加profiler,这将为您提供所有访问的方法、调用链、计数等。

【讨论】:

【参考方案2】:

Visual Studio Profiler 将为您提供每个方法所花费的时间,并让您检查调用层次结构。我不知道它是否会给你他们被调用的确切顺序。

编辑:显然将分析器附加到正在运行的单元测试是harder in VS2012。

【讨论】:

【参考方案3】:

您是否要执行一个测试方法以确保调用了类上的特定方法?如果是这样,我不知道单独在 VS 中执行此操作的方法,但您可以使用模拟框架来创建依赖模拟并检查它们的值。这是单元测试的 sn-p:

 [TestMethod]
        public void HttpPostPrivacyPolicyFacadeSvcErrorTest()
        
            var controller = ControllerHelper.GetRouteController();
            controller.Session[SessionVariable.User] = new UserInfo()  UserName = Config.Data.Username ;

            var idmSvcMock = new Mock<IUserServiceDAO>();
            var facadeSvcMock = new Mock<IFacadeSvcDAO>();

            //setup the facade mock to throw exception to simulate FacadeServiceException
            facadeSvcMock.Setup(x => x.SetPrivacyAcceptanceStatus(It.IsAny<UserInfo>())).Throws<Exception>();
            var userCollectorMock = new Mock<IUserInfoCollector>();
            userCollectorMock.Setup(x => x.GetUserInfo()).Returns(new UserInfo()  UserName = Config.Data.Username );




            controller.FacadeSvc = facadeSvcMock.Object;
            controller.UserServiceDAO = idmSvcMock.Object;
            controller.UserCollector = userCollectorMock.Object;
            controller.DefaultErrorId = "Route_errors_Unabletoprocess";

            //action
            var res = controller.Privacy(new FormCollection());

            //assert
            //make sure we go to the right controller, action, with the correct params.
            res.AssertActionRedirect().ToController("Errors").ToAction("Index").WithParameter("id", "Route_errors_Unabletoprocess");
            //did we call setprivacy once on the mock?
            facadeSvcMock.Verify(x => x.SetPrivacyAcceptanceStatus(It.IsAny<UserInfo>()), Times.Exactly(1));

在上面的测试中,我检查了 SetPrivacyAcceptance 是否在我的 facadeSvcMock 实例上被调用了一次且仅一次。更多关于最小起订量的信息:Moq

这段代码实际上是检查调用了多少次 SetPrivacyAcceptanceStatus: //我们是否在模拟中调用过 setprivacy 一次? facadeSvcMock.Verify(x => x.SetPrivacyAcceptanceStatus(It.IsAny()), Times.Exactly(1));

It.IsAny() 是该方法的一个参数,因此上面的行基本上说“对于 UserInfo 类型的任何输入参数,请验证我们是否只调用了一次 SetPrivacyAcceptanceStatus。”

【讨论】:

以上是关于您可以在 Visual Studio 中记录访问的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

当访问方法为“随机”时,Visual Studio 2010 数据源的行为究竟如何?

Visual Studio 2013。您没有足够的权限访问您机器上的 IIS 网站

文件无法访问 - Visual Studio 2017

在Visual Studio 2010中一次封装多个字段

如何从visual studio代码(拉/推)访问git gist?

visual studio 2015怎样升级