0

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

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

4

3 回答 3

1

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

于 2012-10-02T14:47:00.360 回答
0

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

编辑:显然在 VS2012 中将探查器附加到正在运行的单元测试更难。

于 2012-10-02T14:46:39.180 回答
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 实例上被调用了一次且仅一次。更多关于起订量在这里:起订量

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

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

于 2012-10-02T14:53:24.647 回答