你能在Visual Studio中记录访问过的方法吗?

时间:2012-10-02 14:43:58

标签: visual-studio

我正在追溯记录和编写一些C#代码的单元测试。我想确定实际使用的代码和时间。

在Visual Studio 2012中,是否有办法记录所有访问过的方法以及在特定方案中执行的顺序?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

编辑:显然将探查器附加到正在运行的单元测试harder in VS2012

答案 2 :(得分:0)

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

 [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的更多信息:Moq

这段代码实际上是在检查调用SetPrivacyAcceptanceStatus的次数: //我们在模拟上调用了一次setprivacy吗?             facadeSvcMock.Verify(x =&gt; x.SetPrivacyAcceptanceStatus(It.IsAny()),Times.Exactly(1));

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