一部の C# コードの単体テストをさかのぼって文書化し、作成しています。実際にどのコードがいつ使用されているかを特定したいと思います。
Visual Studio 2012 で、特定のシナリオを実行しているときに、アクセスされたすべてのメソッドとその順序を記録する方法はありますか?
一部の C# コードの単体テストをさかのぼって文書化し、作成しています。実際にどのコードがいつ使用されているかを特定したいと思います。
Visual Studio 2012 で、特定のシナリオを実行しているときに、アクセスされたすべてのメソッドとその順序を記録する方法はありますか?
プロファイラーをアタッチしてアプリケーションを実行すると、アクセスされたすべてのメソッド、呼び出しチェーン、カウントなどが得られます。
クラスの特定のメソッドが呼び出されたことを確認するテストメソッドを実行しますか?もしそうなら、私は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));
上記のテストでは、私のfacadeSvcMockインスタンスでSetPrivacyAcceptanceが1回だけ呼び出されたことを確認します。moqの詳細はこちら:Moq
このコードブロックは、実際にSetPrivacyAcceptanceStatusが呼び出された回数をチェックしています。//モックでsetprivacyを1回呼び出しましたか?facadeSvcMock.Verify(x => x.SetPrivacyAcceptanceStatus(It.IsAny())、Times.Exactly(1));
It.IsAny()はそのメソッドの1つのパラメーターであるため、上記の行は基本的に「UserInfoタイプの入力パラメーターについて、SetPrivacyAcceptanceStatusを1回だけ呼び出したことを確認してください」と述べています。
Visual Studio プロファイラーは、各メソッドで費やされた時間を提供し、呼び出し階層を検査できるようにします。ただし、呼び出された正確な順序が得られるかどうかはわかりません。
編集: VS2012では、プロファイラーを実行中の単体テストに接続するのがより難しいようです。