Czy są jakieś aplikacje open source, które są opracowywane przy użyciu programowania opartego na testach, które służą jako modele tego, jak powinny działać dobre testy jednostkowe?
Wolałbym zobaczyć przykłady w C # i .NET. (Pamiętaj, że wspomniałem o aplikacjach, nie tylko bibliotekach).
Jestem programistą średniego poziomu, który naprawdę chce wierzyć i ćwiczyć TDD. Aplikacja, nad którą pracuję w codziennej pracy, jest dość skomplikowana - około 1 miliona linii kodu - i chciałbym wprowadzić więcej testów jednostkowych. Mamy kilka testów jednostkowych, ale moje wysiłki w TDD i praca nad kodem, który już jest testowany, nie były zachęcające.
Z mojego, co prawda ograniczonego doświadczenia, TDD wydaje się zachęcać do dużej złożoności w imię oddzielenia. Fragmenty aplikacji, które są trudne do przetestowania - i które przypadkowo wydają się być krytyczne - zostają wypchnięte na peryferie, w sferę testów integracyjnych, które mogą, ale nie muszą, zostać napisane. (Mam tu na myśli zwykłych podejrzanych, dostęp do systemu plików, nawadnianie obiektów z bazy danych, asynchroniczne połączenia internetowe itp.)
Testowany kod zwykle wymaga dużej współpracy między obiektami i być może pewnej prostej logiki przepływu, która wszystko dzieje się w pamięci i którą można prawdopodobnie napisać w prostszy, bardziej zrozumiały sposób, gdyby wszystko nie musiało być całkowicie oddzielone dla testów.
Rozumiem techniki kpienia z zależności i tym podobne, ale z mojego doświadczenia wynika, że częste stosowanie kpiny prowadzi do bardzo kruchych testów. Jeśli moim pierwszym instynktem po zobaczeniu kilku testów zmieniających kolor na czerwony jest „Świetnie, teraz muszę naprawić wszystkie kpiny”, to moje testy stały się oporem, a nie siatką bezpieczeństwa.
Próbuję ominąć tę mentalną barierę i w ramach tego czytam książkę Michaela Feathersa pt. „ Skutecznie współpracując ze starszym kodem” . Mam nadzieję, że pokaże mi część tego, czego mi brakuje.
Chciałbym również przestudiować nietrywialne aplikacje .NET z dobrym pokryciem kodu, być może system zarządzania treścią lub aplikację CRUD. Framework testowy FitNesse, o którym mówi wujek Bob, jest prawdopodobnie czymś, na co mogę się przyjrzeć, ale fajnie byłoby zobaczyć coś napisanego w języku, który znam najbardziej.
Wszelkie sugestie lub słowa mądrości będą mile widziane.
źródło
Odpowiedzi:
Nie wiem, czy użyto TDD, ale znakomitym przykładem testowania jest sqlite, który ma niezwykłe 100% pokrycie gałęzi i ma ponad 1000 razy więcej kodu testowego i skryptów niż kod produktu.
źródło
Projekt Orchard może być tym, czego szukasz. Jest to aplikacja .NET / MVC / TDD, która jest dość złożona, ale nie jest taka zła i pokazuje kilka dobrych praktyk i wzorców.
http://orchard.codeplex.com/wikipage?title=solution
i chyba zaktualizowany link:
http://docs.orchardproject.net/
źródło
Wiele zewnętrznych bibliotek typu open source jest TDDed. Biblioteki Hibernating Rhinos, takie jak RhinoMocks i NHibernate, są TDDed przez programistów używających XUnit jako środowiska do testowania jednostek.
Teraz, z OSS, zwykle nie możesz zagwarantować, że WSZYSTKO w produkcie zostało TDDeded. Społeczność może mieć standardy obejmujące tę praktykę, a nawet może korzystać z bota kompilacji, który wykonuje pomiary zasięgu kodu, ale TDD jest mentalnością, którą musi kupić programista, a ogół społeczeństwa może zobowiązać się do otwarcia- źródłowych pni VCS, takich jak te na GitHub, każdy może dokonać dowolnej zmiany z dowolną ilością pokrycia testowego (lub jeśli wymagany jest zasięg, testy mogły zostać napisane po fakcie, co jest pogwałceniem ducha TDD, ale tak naprawdę nie ma dobry sposób na złapanie go przy zatwierdzeniu).
źródło