私は MSpec を初めて使用し、ASP.NET MVC のテストを記述した方法が正しいかどうかを知りたいです。テストはパスしましたが、書き方が気に入らず、ぎこちなく見えます。私は確かに何かが欠けています。
public class AccountControllerTests3
{
    protected static AccountController controller;
    static IFormsAuthenticationService formsService;
    static IMembershipService membershipService;
    protected static ActionResult result;
    protected static LogOnModel model;
    Establish context = () =>
    {
        var controllerBuilder = new TestControllerBuilder();
        formsService = MockRepository.GenerateStub<IFormsAuthenticationService>();
        membershipService = MockRepository.GenerateStub<IMembershipService>();
        model = MockRepository.GenerateStub<LogOnModel>();
        controller =
            controllerBuilder.CreateController<AccountController>(new object[]
                                                                    {
                                                                        formsService,
                                                                        membershipService
                                                                    });
    };
    Because user_logs = () =>
    {
        bool rememberMe = false;
        membershipService.Stub(
            x => x.ValidateUser("bdd", "mspec")).Return(true);
        formsService.Stub(x => x.SignIn("bdd", rememberMe));
        controller.ModelState.IsValid.ShouldBeTrue();
    };
}
[Subject(typeof(AccountController), "LogInTests")]
public class When_logging_into_application_with_good_login_and_password : AccountControllerTests3
{
    private It user_should_be_redirected_to_the_home_page = () =>
                                                                {
                                                                    model.UserName = "bdd";
                                                                    model.Password = "mspec";
                                                                    result = controller.LogOn(model, string.Empty);
                                                                    result.AssertActionRedirect().ToAction<HomeController>(
                                                                        x => x.Index());
                                                                };
}
[Subject(typeof(AccountController), "LogInTests")]
public class When_logging_into_application_with_bad_login_and_password : AccountControllerTests3
{
    It The_error_message_should_be_shown = () =>
                                            {
                                                model.UserName = "BAD";
                                                model.Password = "BAD";
                                                result = controller.LogOn(model, string.Empty);
                                                controller.ModelState[""].Errors[0].ErrorMessage.ShouldEqual(
                                                    "The user name or password provided is incorrect.");
                                            };
}
前もって感謝します、
トーマス