public void RegisterDefaultValidatableObjectAdapterGuardClauses()
        {
            // Adapter type cannot be null
            Assert.ThrowsArgumentNull(
                () =>
                DataAnnotationsModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(
                    null
                    ),
                "adapterType"
                );

            // Adapter must derive from ModelValidator
            Assert.Throws <ArgumentException>(
                () =>
                DataAnnotationsModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(
                    typeof(object)
                    ),
                "The type System.Object must derive from System.Web.Mvc.ModelValidator\r\nParameter name: adapterType"
                );

            // Adapter must have the expected constructor
            Assert.Throws <ArgumentException>(
                () =>
                DataAnnotationsModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(
                    typeof(MyValidatableAdapterBadCtor)
                    ),
                "The type System.Web.Mvc.Test.DataAnnotationsModelValidatorProviderTest+MyValidatableAdapterBadCtor must have a public constructor which accepts two parameters of types System.Web.Mvc.ModelMetadata and System.Web.Mvc.ControllerContext.\r\nParameter name: adapterType"
                );
        }
        public void RegisterDefaultValidatableObjectAdapter()
        {
            var oldFactory = DataAnnotationsModelValidatorProvider.DefaultValidatableFactory;

            try
            {
                // Arrange
                var metadata = ModelMetadataProviders.Current.GetMetadataForType(
                    () => null,
                    typeof(MyValidatableClass)
                    );
                var context = new ControllerContext();
                DataAnnotationsModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(
                    typeof(MyValidatableAdapter)
                    );

                // Act
                var result = new DataAnnotationsModelValidatorProvider()
                             .GetValidators(metadata, context)
                             .Single();

                // Assert
                Assert.IsType <MyValidatableAdapter>(result);
            }
            finally
            {
                DataAnnotationsModelValidatorProvider.DefaultValidatableFactory = oldFactory;
            }
        }