Fake It Easy jest naprawdę super biblioteką która umożliwia wam robienie fake’ów – bo po jakiego grzyba się zastanawiać czy macie robić stub, mock czy może coś jeszcze innego?

Proste wykorzystanie:

var x = A.Fake<IWantThat>();

I mamy naszego fake’a.

Do tego umożliwia ona bardzo fajne intercept przy wywoływaniu danej metody i przechwytywania ich parametrów, na przykład:

public static void intercept_create<TEntity>(this IOrgServiceContext @this, Action<TEntity> intercept)
    where TEntity : Entity, new()
{
    A.CallTo(() => @this.AddObject(A<Entity>.That.IsInstanceOf(typeof(TEntity))))
        .Invokes(x => intercept(x.GetArgument<TEntity>(0)));
}

Niestety ma ona pewne problemy z przechwytywaniem zdarzeń on set -> trzeba się trochę namęczyć, napisać mały fragment kodu itp.

Dlatego ostatnio ostro się zafixowałem jak mam przechwycić set na słowniku? Przez dobre pół godziny się męczyłem z intercept. W końcu udało mi się zrobić to co chciałem i nagle mnie olśniło.

Po co ja marnowałem tyle czasu na to jak wystarczyło zrobić to tak:

var result = new Dictionary<string, object>();
A.CallTo(() => _actionContext.ActionParameters).Returns(result);

_attribute.OnActionExecuting(_actionContext);

Assert.Equal(1, result.Count);
Assert.Equal("VALUE", result["some_key"]);

I kłopot z głowy… tak by się wydawało :)

Zadowolony odszedłem od kompa, następnego dnia wróciłem, siadam i znów ten sam problem… tym razem w ciągu 10 minut sobie przypomniałem, że w końcu go rozwiązałem wczoraj :)

Więc zarówno ten post jak i notatka w onenote, mają mi na siłę przypomnieć, że coś takiego zrobiłem i, że to działa i, że nie ma sensu znów nad tym męczyć łepetyny :)

Może też się to komuś przyda ;)