Thank you very much. You're building a cool library! For now I end up with the following (I called my helper Mock since Substitute is not partial):
var articlePage = Mock.Recursive.IgnoreType<XhtmlString>().Substitute<ArticlePage>();
articlePage.PageName.Returns("ArticlePage");
The helper is:
public static class Mock
{
public static RecursiveMockStrategy Recursive
{
get { return With<RecursiveMockStrategy>(); }
}
public static TStrategy With<TStrategy>()
where TStrategy: IMockStrategy
, new() // TODO: ?replace with DI
{
return new TStrategy();
}
}
If it's interesting I'll share the rest of code too, but the main idea - each strategy supports proper fluent to configure substitutes. My API supports:
public partial class RecursiveMockStrategy
{
...
public RecursiveMockStrategy IgnoreType<T>() {...}
public ConditionClause For(Func<PropertyInfo, bool> condition) {...}
public ConditionClause For(Func<object, PropertyInfo, bool> condition) {...}
public class ConditionClause
{
...
public RecursiveMockStrategy Ignore() {...}
public RecursiveMockStrategy MockUsing(Action<object, PropertyInfo> action) {...}