SpecFlow + XUnit

Specflow fajny jest, piszemy scenariusze czytelne dla ludzi a pod spodem szaleje xunit i sprawdza. Jest tylko jedne problem, aktualnie specflow.xunit instaluje xunit 2.0 a do pliku .feature.cs generuje kod:

MyProjFeature : Xunit.IUseFixture

No i klops, IUseFeature już nie jest dostępny w xunit 2. Można jednak sobie poradzić mieszając trochę w pakietach. Po prostu trzeba po instalacji specflow.xunit odinstalować wszystko związane z xunit 2.0 (use the –Force Luke) i zainstalować xunit 1.9.2 i wszystko śmiga. Poniżej zestaw magicznych zaklęć:

install-package -ProjectName "MyProj.Specs" specflow.xunit
uninstall-package -ProjectName "MyProj.Specs" xunit –Force
uninstall-package -ProjectName "MyProj.Specs" xunit.abstractions –Force
uninstall-package -ProjectName "MyProj.Specs" xunit.extensions –Force
uninstall-package -ProjectName "MyProj.Specs" xunit.assert –Force
uninstall-package -ProjectName "MyProj.Specs" xunit.core –Force
uninstall-package -ProjectName "MyProj.Specs" xunit.extensibility.core –Force
install-package -ProjectName "MyProj.Specs" xunit -Version "1.9.2"
install-package -ProjectName "MyProj.Specs" xunit.extensions -Version "1.9.2"

Cena darmochy ciąg dalszy

Szybko czas leci i od ostatniego wpisu minął prawie kwartał. Nawet nie wiem kiedy. W poprzednim wpisie marudziłem na FireBirda – pseudo bazę danych. Ciekawą polemikę podjął Gutek w swoim wpisie. Nie mogę się zgodzić jednak z

takie rzeczy mają prawo się dziać, w końcu, i tak mamy dostęp do naprawdę całkiem spoko bazy danych. A co w przypadku rzeczy które są „prawie” darmowe?

FireBird jest darmowy jednak nie do końca. Wymaga on pracy developera a ta kosztuje realne pieniądze. Zresztą:

nazywam „prawie” darmowe rzeczy, które są darmowe do ściągnięcia i nawet na siłę da się w nich za darmo programować, ale nie jest to już takie proste

No właśnie, praca z FireBirdem prosta nie jest co pokazałMichał Jawulski pokazując mi jak ustawić transakcje, żeby można było zrobić rename tabeli – sorry nie rename bo tego do  tej pory nie wiem jak zrobić – delete i recreate. Nie wspominając o 1=0 – ciągle mnie to zadziwia. To co mnie jednak najbardziej zadziwia to:

Spójność danych

Okazuje się, że w FireBirdzie można w dla kolumy powiedzmy X która zawiera kilka nuli to tu to tam, dodać constraint not null. FireBird nie powie słowa. Ot doda not null constraint dla kolumny. Wszystko pięknie gra bo już nie wrzucimy nowego rekordu z nullem w kolumnie X i nikomu zupełnie nie przeszkadza, że w not null jest jednak null  (w starych danych). WOW ale najlepsze jest jak się zrobić backup – bo się zrobi. Tyle tylko, że już restore nie zadziała (podobno bo nie sprawdzałem osobiście – jak ktoś potrafi jednak użyć takiego backupa to proszę przemówić).

Złośliwy programista

No właśnie, co jeśli budując program w jakimś defaultowym słowniku programista niby przypadkowo, niby złośliwie, ot tak, wrzuci jakiś jeden null a potem doda not null i taką bazę będzie redystrybuował ze swoją aplikacją? Baza będzie nierestorowalna, więc w sytuacji ekstremalnej, gdzie admin w swojej niekompetencji nigdy nie sprawdzi czy restore działa, pewnego dnia obudzi się z zepsutą bazą i bez backupów (które mógł by użyć)….

… dlatego FireBird w mojej ocenie to pseudo baza, której powinno się unikać jak się da.

Cena darmochy

Dobrze nazwana klasa, dobrze nazwana zmienna, dobrze nazwana tabela to połowa sukcesu w naszym zawodzie. Czytelny kod zdradzający już na pierwszy rzut oka intencje autora to skarb. Nie trzeba się głowić OCB, WTF, ot czytamy i wiemy co to to robić powinno. Jeśli jeszcze to robi to po prostu miodzik.

Dobra nazwa to podstawa!

No i taka sytuacja, nazwa tabeli w bazie dostała nie bardzo czytelną nazwę – autor użył skrótów bo baza FireBird pozwala na zaledwie 31 znaków w nazwie tabeli i za bardzo nawet nie można tego zmienić (http://stackoverflow.com/questions/20155517/is-it-possible-to-extend-firebird-table-name-length). Trochę później autor stwierdził, że trzeba zmienić tą nazwę na bardziej czytelną bo nic z niej nie wiadomo – nie wiedział jeszcze o nadchodzącej masakrze ale nie uprzedzajmy faktów.

Zonk… nie da się zmienić nazwy tabeli. Ot FireBird nie przewiduje takiej możliwości…. serio w “bazie danych” FireBird nie ma możliwości zmiany nazwy tabeli (http://www.firebirdfaq.org/faq363/). FB DBNazi mówił, że nazwa jest ok i żeby ją zostawić ale nie, biedak się uparł. Tabelka miała kilka zależności więc trzeba było poprawić skrypty, założyć nową tabelkę, tu poprzepinać tam pogłaskać, zabawa po pachy – idealnie na piątkowy poranek – tak przed weekendem. Jeszcze tylko usunąć starą tabelkę…..

…. taa…. kto by się spodziewał, że w FireBird nie bardzo można usunąć tabelkę jeśli ktoś jest podłączony do bazy. To nie ma znaczenia, że nikt nie używa tej tabeli, ot jest ktokolwiek podłączony to nie usuniesz nic bracie*. Baza testowo/developerska więc spoko, ubijemy co tam wisi, tylko że gdzieś 2 apache korzystały z tej bazy, jakieś 2-3 inne usługi gdzieś też posłusznie połączone, ja dziubiąwszy dodatek do outlooka również pośrednio cośtam ssałem z tej bazy. A… i jeszcze jeden dev pojechał na wywczas a na komputerze chyba zostawił aktywne połączenie IBExpertem (takie SQL Managemenet Studio tylko że płatne, brzydkie i wydające dźwięki – serio). Suma sumarum nasz biedny dev co to nazwę chciał mieć ładną, spowodował że prawie cały dział musiał zawiesić pracę a i kilku wdrożeniowców do pomocy przybiegło. Jak się wszyscy odłączyli a i on sam zrestartował IBExperta w końcu dostąpił zaszczytu usunięcia tabeli. Gromkie oklaski – serio klaskaliśmy temu kozakowi że dokonał tego – i już spokojnie możemy wszyscy ruszyć dalej pchać interaktorami encje w otchłań wszechmocnego FireBird-a.

*) nieprawdą jest że jeśli są podłączeni ludkowie to nie usuniesz nic. FireBird to taka “baza danych”, w której da się usunąć plik bazy w czasie pracy i serwer nawet nie zająknie. W wszystko dalej będzie ładnie działało w pamięci – ale już 1 tabelki to nieeeeee bo bezpieczeństwo bo acid bo transakcje czy co tam jeszcze.

Jeszcze mało?

select a,b,c
from whatever
where 1 = 0

Spowoduje oczywiście, przeskanowanie całej tabeli!!! Wszak dla każdej krotki trzeba sprawdzić czy aby na pewno warunek w where jest prawdziwy czy fałszywy.

Serio mało jeszcze?

No to podobno ze statystykami jest jakoś tak, że baza lepiej działa jak się zrobi backup i restore – ot tak profilaktycznie.

Jeśli chcesz skorzystać z tej super “bazy danych” to warto nadmienić, że FireBird jest darmowy – jeśli nie liczyć ogromu pracy potrzebnej przez wymienione powyżej kwiatuszki a to podobno nie wszystkie cuda jakie ofertuje to coś.

Graficzny klient do gita–SourceTree jest już dostępny

Kilka tygodni firma Atlassian ogłosiła zamkniętą betę swojego (podobno jednego z najlepszych)klientów git-a Wczoraj wyszedł z wersji beta i jest oficjalnie dostęny.

http://www.sourcetreeapp.com/

image

Od czasów bety używam go do oglądania repozytorium i czasem do commitowania i wygląda, że jest całkiem przyzwoity. Myślę, że warto spróbować.