我正在追溯记录和编写一些C#代码的单元测试。我想确定实际使用的代码和时间。
在Visual Studio 2012中,是否有办法记录所有访问过的方法以及在特定方案中执行的顺序?
答案 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。”