/// <summary> /// Register a factory method for the specified type. /// </summary> /// <typeparam name="T">The type of object the factory method creates.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="factory">The factory method.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> or <paramref name="factory"/> is <c>null</c>.</exception> public static void Register <T>(this IRegisterAnonymousData anon, Func <IAnonymousData, T> factory) { Argument.NotNull(anon, nameof(anon)); Argument.NotNull(factory, nameof(factory)); anon.Register(typeof(T), f => factory(f)); }
/// <summary> /// Sets the minimum item count used when creating collections. /// </summary> /// <param name="anon">The anon.</param> /// <param name="value">The value.</param> public static void SetMinimumItemCount(this IRegisterAnonymousData anon, int value) { Argument.NotNull(anon, nameof(anon)); Argument.InRange(value, 0, int.MaxValue, nameof(value)); anon.SetValue(MinItemCountKey, value); }
/// <summary> /// Freezes the specified value as the result for any further calls to <see cref="Any"/> /// for the specified type. /// </summary> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="type">The type to freeze.</param> /// <param name="value">The instance to freeze.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> or <paramref name="type"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException"><paramref name="value"/> is not assignable to <paramref name="type"/>.</exception> public static void Freeze(this IRegisterAnonymousData anon, Type type, object value) { Argument.NotNull(anon, nameof(anon)); Argument.NotNull(type, nameof(type)); Argument.IsAssignableTo(value, type, nameof(value)); anon.Register(type, f => value); }
/// <summary> /// Freezes a mock instance as the result for any further calls to <see cref="AnonymousData.Any"/> /// for the specified type. /// </summary> /// <typeparam name="T">The type to freeze.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="config">The delegate invoked to configure the mock behavior.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> is <see langword="null"/>.</exception> public static void FreezeMock <T>(this IRegisterAnonymousData anon, Action <Mock <T> > config) where T : class { var mock = new Mock <T>(); config?.Invoke(mock); anon.Freeze(mock); }
/// <summary> /// Registers the mock object with a delegate to use to configure the mock behavior. /// </summary> /// <typeparam name="T">The type to mock.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="config">The delegate invoked to configure the mock behavior.</param> public static void RegisterMock <T>(this IRegisterAnonymousData anon, Action <Mock <T> > config) where T : class { Argument.NotNull(anon, nameof(anon)); anon.Register <Mock <T> >(_ => { var mock = new Mock <T>(); config?.Invoke(mock); return(mock); }); }
/// <summary> /// Registers a factory method for the specified property. /// </summary> /// <typeparam name="T">The type that declares the property.</typeparam> /// <typeparam name="TProperty">The type of the property.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="propertyExpression">An expression representing the property to populate.</param> /// <param name="factory">The factory method.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> or <paramref name="propertyExpression"/> or /// <paramref name="factory"/> is <c>null</c>.</exception> public static void Register <T, TProperty>( this IRegisterAnonymousData anon, Expression <Func <T, TProperty> > propertyExpression, Func <IAnonymousData, TProperty> factory) { Argument.NotNull(anon, nameof(anon)); Argument.NotNull(propertyExpression, nameof(propertyExpression)); Argument.NotNull(factory, nameof(factory)); var member = ReflectionExtensions.GetMemberInfo(propertyExpression); var property = member?.Member as PropertyInfo; if (property == null) { throw new ArgumentException("Invalid property expression."); } anon.Register(property, f => factory(f)); }
/// <summary> /// Freezes the specified value as the result for any further calls to <see cref="Any"/> /// for the specified type. /// </summary> /// <typeparam name="T">The type to freeze.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="value">The instance to freeze.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> is <c>null</c>.</exception> public static void Freeze <T>(this IRegisterAnonymousData anon, T value) { Argument.NotNull(anon, nameof(anon)); anon.Freeze(typeof(T), value); }
/// <summary> /// Freezes a mock instance with default behavior as the result for any further calls to <see cref="AnonymousData.Any"/> /// for the specified type. /// </summary> /// <typeparam name="T">The type to freeze.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> is <see langword="null"/>.</exception> public static void FreezeMock <T>(this IRegisterAnonymousData anon) where T : class => anon.FreezeMock(new Mock <T>());
/// <summary> /// Freezes a mock instance as the result for any further calls to <see cref="AnonymousData.Any"/> /// for the specified type. /// </summary> /// <typeparam name="T">The type to freeze.</typeparam> /// <param name="anon">The anonymous data provider to use.</param> /// <param name="instance">The mock instance to freeze.</param> /// <exception cref="ArgumentNullException"><paramref name="anon"/> is <see langword="null"/>.</exception> public static void FreezeMock <T>(this IRegisterAnonymousData anon, Mock <T> instance) where T : class => anon.Freeze(instance);