Menu / szukaj

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

Migracja z ASP.NET Core 1.0.x do 1.1

Od 17 listopada dostępna jest nowa wersja .NET Core 1.1. Wraz z nią pojawiły się nowe wersje ASP.NET oraz EntityFrameworka. Przyszedł, więc czas na aktualizację aplikacji do najnowszego środowiska. Proces ten powinien przebiegać bezboleśnie, ale nie do końca. W moim przypadku miałem problemy z dwoma elementami, co spowodowało, że aplikacja nie wystartowała od razu po aktualizacji.

Przed przystąpieniem do aktualizacji należy ściągnąć najnowszą wersją pakietów – zarówno SDK, jak i Runtime. Pakiety do ściągnięcia dostępne są na stronie .NET Core Downloads. Czytaj dalej

.net DD 2016 – materiały

Od jakiegoś czasu dostępne są już na kanale YouTube materiały z konferencji .NET DeveloperDays 2016. Jeśli chodzi o mnie to w tym roku najlepszym prelegentem był Ted Neward. Szczególnie polecam sesję zamykającą. Nie jest to prezentacja ściśle techniczna, a raczej filozoficzna. W jej trakcie Ted pokazuje jak istotne znaczenie na ocenę sytuacji ma kontekst. Oraz jak trudno jest znaleźć najlepsze jednoznaczne rozwiązanie. Zresztą zobaczcie sami.

FluentValidation.Validators.UnitTestExtension

Chciałem Was zachęcić do używania biblioteki, którą ostatnio opublikowałem – FluentValidation.Validators.UnitTestExtension. Głównym jej celem jest rozszerzenie oraz uproszczenie możliwości testowania kodu, który wykorzystuje pakiet FluentValidation do walidacji obiektów.

Bibliotekę można zainstalować wykorzystując nugeta:


Install-Package FluentValidation.Validators.UnitTestExtension

lub ściągnąć kod z GithHuba.

Na wiki dotyczącej biblioteki FluentValidation można znaleźć propozycję pisania testów przygotowaną przez autorów biblioteki. W celu ułatwienia nam tego procesu autorzy przygotowali dwie metody ShouldHaveValidationErrorFor oraz ShouldNotHaveValidationErrorFor. Czytaj dalej

Lightning talk – Autofixture

Zachęcam do pobrania i przejrzenia prezentacji z mojego lightning talka dotyczącego biblioteki AutoFixture. Zadaniem tej biblioteki jest ograniczenie części Arrange, a tym samym kosztów utrzymania kodu w testach jednostkowych poprzez ułatwienie nam tworzenia obiektów. Prezentację można ściągnąć z GitHuba – AutoFixture – Lightning talk. Prezentacja przedstawia przykłady użycia wspominanej biblioteki oraz zawiera porównanie AutoFixture do innych bibliotek dostarczających podobną funkcjonalność. Oczywiście na GitHubie znajduje się również kod z przykładami.

Testy jednostkowe SQL – raport pokrycia kodu

Pisanie testów jednostkowych do kodu jest dziś powszechną praktyką, aczkolwiek nie dla wszystkich języków. Pisząc strony WWW, aplikacje desktopowe czy też mobilne przywykliśmy do tego, że tworzymy testy jednostkowe sprawdzające kod aplikacji. Natomiast nie robimy tego dla kodu napisanego w bazie danych. Po części dlatego, że używamy narzędzi ORM, które generują ten kod za nas. I wtedy nie ma rzeczywiście takiej potrzeby.

Inaczej wygląda sytuacja w momencie, gdy sami piszemy kod SQLa. Wtedy kod ten powinien zostać przetestowany na takich samych zasadach jak normalny kod produkcyjny. Jeśli nasza baza stoi na Microsoft SQL możemy do tego wykorzystać bibliotekę tSQLt. Bibliotekę tę używa się bardzo prosto. Pozwala ona fakeować widoki, tabele, funkcje, jak również procedury składowane. Osoby bardziej zainteresowane tematem odsyłam na stronę biblioteki. Czytaj dalej

PDF Combiner 1.7

W najnowszej wersji aplikacji wprowadziłem następujące zmiany:

– zmieniłem sposób łączenia plików
– poprawiłem działania przycisków Move up i Move down,
– naprawiłem wygląd aplikacji przy niestandardowych ustawieniach DPI w Windowsie,
– dodałem zabezpieczenia przed przypadkowym nadpisaniem pliku łączonego.

Najnowsza wersja może być pobrana ze strony aplikacji.

Błąd StyleCop SA0120 w Visual Studio 2015

Aktualizacja środowiska do nowszej wersji jak zwykle powoduje, że pojawiają się nowe, dziwne sytuacje. W projektach wykorzystujących narzędzie StyleCop do analizy kodu może pojawić się błąd SA0120 CSharp.CsParser.

Wygląda na to, że jest to jakiś wewnętrzny błąd ponieważ nie został on wspomniany w dokumentacji listy ostrzeżeń generowanych przez StyleCop. Błąd ten nie pojawia się od razu po przejściu na Visual Studio 2015, a dopiero po wykorzystaniu składni wprowadzonej w C# 6.0. W sumie nie ma co się dziwić, że pojawiają się jakieś problemy z tym narzędziem, skoro ostatnia jego wersja (StyleCop 4.7.49.0) została opublikowana w kwietniu 2014 roku.

SA0120.png
Błąd SA0120

Opisany problem można rozwiązać na 3 sposoby:

Czytaj dalej

PDF Combiner 1.6

W najnowszej wersji aplikacji wprowadziłem następujące zmiany:

– dodałem wsparcie dla dokumentów przygotowanych zgodnie z najnowszym standardem dokumentu typu PDF,
– wprowadziłem możliwość łączenia dokumentów, które zabezpieczone są hasłem przed otwarciem,
– dodałem możliwość skopiowania dokładniejszej informacji o błędzie do systemowego schowka.

Najnowsza wersja może być pobrana ze strony aplikacji.