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 ;)