Menu / szukaj

DSP 2017 – nuget.download.stats – Sprint 1

Minął pierwszy tydzień Daj Się Poznać 2017. Czas na drobne podsumowanie. Projekt wystartował pomału. W repozytorium pojawił się kod, który wystawia WebAPI pozwalające na pobranie podstawowych informacji o paczkach.

Trochę czasu zeszło na zabawę z Visual Studio 2017.  Niestety nie działa ono tak dobrze jak myślałem. Liczyłem na to, że w końcu będzie można pracować normalnie z testami jednostkowymi. Ale tak się nie stało. Narzędzie wspiera pisanie testów w xUnicie. Pozwala je nawet uruchomić, ale liczyłem, że po premierze Visual Studia 2017 będzie działał już w pełni Resharper, ale tak się nie stało. Kolejna nowość, którą chciałem przetestować to Live Unit Testing, ale ta funkcjonalność również nie działa z .NET Core.

Zacząłem się również zastanawiać, czy zamiast Angulara 2/4 nie użyć jakiegoś lżejszego frameworka, ale decyzja jeszcze nie zapadła.

Pakiet Moq.EntityFramework.Helpers

Na blogu pojawiły się ostatnio dwa wpisy pokazujące w jaki sposób mnożna zamockować DbSet<TEntity> wykorzystując Moq:

Opisane rozwiązania połączyłem w jednej bibliotece i opublikowałem jako pakiet NuGet – Moq.EntityFramework.Helpers. Czytaj dalej

EntityFramework – testowanie zapytań asynchonicznych

Jakiś czas temu opisałem w jaki sposób można zamockować typy DbContext przy pomocy MoqMockowanie typów DbContext oraz DbSet z wykorzystaniem Moq. Temat ten nie został wtedy całkowicie wyczerpany. Pozostał jeden element do opisania – zapytania asynchoroniczne. Do tego elementu chciałbym dziś wrócić.

Punktem wyjście będzie poprzedni wpis – czyli mamy fragment kodu, który pozwala na zamockowanie DbSet<T>. Teraz tylko dodamy możliwość obsługi wywołań asynchronicznych. Aby to zrobić należy zaimplementować interfejs IDbAsyncQueryProvider:

public class InMemoryAsyncQueryProvider<TEntity> : IDbAsyncQueryProvider
{
  private readonly IQueryProvider innerQueryProvider;
  
  internal InMemoryAsyncQueryProvider(IQueryProvider innerQueryProvider)
  {
    this.innerQueryProvider = innerQueryProvider;
  }

  public IQueryable CreateQuery(Expression expression)
  {
    return new InMemeoryAsyncEnumerable<TEntity>(expression);
  }

  public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
  {
    return new InMemeoryAsyncEnumerable<TElement>(expression);
  }

  public object Execute(Expression expression)
  {
    return this.innerQueryProvider.Execute(expression);
  }
  
  public TResult Execute<TResult>(Expression expression)
  {
    return this.innerQueryProvider.Execute<TResult>(expression);
  }

  public Task<object> ExecuteAsync(Expression expression, CancellationToken cancellationToken)
  {
    return Task.FromResult(Execute(expression));
  }

  public Task<TResult> ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
  {
    return Task.FromResult(Execute<TResult>(expression));
  }
}

Czytaj dalej

Daj Się Poznać – Krótki wstęp

Kilka dni temu wystartowała kolejna edycja konkursu Daj Się Poznać. Trochę się zastanawiałem, czy wziąć w niej udział. Główną przeszkodą był jak zwykle kalendarz – praktycznie każdy weekend do końca maja zajęty oraz dodatkowo dwa wyjazdy zagraniczne (w tym jeden dłuższy). Nigdy na wakacje nie brałem laptopa, a tym razem chyba nie będzie wyjścia. Postanowiłem jednak spróbować – tym bardziej, że namawiałem Jurka i grzechem byłoby się nie zapisać. Mam nadzieję, że uda mi się dotrwać do końca. Potraktuję to jako wyzwanie.

Tyle o konkursie… Skupmy się na problemie.

Już od jakiegoś czasu próbuję przerzucić się na technologie webowe. Generalnie idzie mi to całkiem dobrze, ale cały czas mam niedosyt, że nigdy nie zacząłem takiego projektu od samego początku. Zawsze trafiałem już do projektów, gdzie większość rzeczy została już zdefiniowana. Z tego powodu stwierdziłem, że napiszę coś małego, gdzie będę mógł poznać każdy etap powstawania aplikacji. Technologicznie chciałem, aby wyjść poza strefę swojego komfortu oraz poznać nowe technologie. Wybór padł więc na: ASP.NET Core jako backend oraz Angular2 jako frontend (zastanawiam się jeszcze czy nie wykorzystać już Angulara4). Całość ma być hostowana w Azure.

I najważniejsze problem, który ma zostać rozwiązany – przygotowanie aplikacji, która pozwoli na śledzenie liczby ściągnięć pakietów z NuGeta. Dodatkowo chciałbym, aby istniała możliwość umieszczenia przycisku / obrazka na GitHubie, który będzie informował o aktualnej liczbie ściągnięć naszego pakietu.