2011-11-26 10 views
6

Mam zestaw udostępniający interfejs API i używany przez inne zespoły. Muszę sprawdzić, czy nowsza wersja biblioteki DLL API jest nadal zgodna ze starszymi wersjami, które używały starszej wersji interfejsu API.Jak mogę przetestować kompatybilność wsteczną interfejsu API między zespołami .net?

Znalazłem kilka pytań, które zadają to samo, ale nie ma odpowiedzi, które rozwiązać mój problem:

Proponowane narzędzia mogą tylko porównanie dwóch zgrupowania i powiedz, czy możliwe są zmiany w API, ale nie, jeśli najnowszy interfejs API naprawdę zepsuje starszy zestaw, który go używa. Chciałbym znaleźć narzędzie lub napisać test, który będzie w stanie sprawdzić, czy każda ze starszych bibliotek dll może współpracować z moją nową biblioteką DLL API.

Jeśli chodzi o zmiany w interfejsie API, to najprawdopodobniej będę je tylko rozszerzał, ale mimo to nadal może złamać kod w starszych zestawach. Niektóre z przykładów takich zmian można znaleźć tutaj:

Na razie jedynym rozwiązaniem widzę jest do kompilacji kodu źródłowego starszych zespołów z najnowszym API , ale chciałbym to zrobić tylko ze złożeniami i dodać je jako część moich testów jednostkowych. Czy jest jakiś lepszy sposób, żeby sobie z tym poradzić?

edit:

Szukam narzędzie, które będą w stanie zautomatyzować proces weryfikacji wstecznej kompatybilności między zespołami .NET. (linia poleceń lub z niektórymi api też)

+1

To prawdopodobnie mój brak zrozumienia, ale nie rozumiem, jak narzędzie, którego szukasz, może zrobić lepiej lub łatwiej niż samo skompilowanie połączonych źródeł. To znaczy, narzędzie będzie potrzebowało zarówno starego, jak i nowego źródła, aby móc analizować zmiany w sposób zamierzony, prawda? Może zapełnisz mnie. –

+0

@GertArnold Mam zaktualizowane pytanie, chciałbym zautomatyzować ten proces, więc może nie być bardzo wygodne ręczne kompilowanie kodu źródłowego lub ręczne uruchamianie narzędzia – username

Odpowiedz

9

To, czego potrzebujesz, to zrobić diff i wygenerować listę zmian zrywających. Następnie chcesz wyszukać, czy z twoich złożeń korzysta z jednego z uszkodzonych API. Możesz to zrobić za pomocą narzędzia ApiChange, aby zrobić różnicę i znaleźć wszystkich dotkniętych tym użytkowników.

Aby było bardziej konkretne. Jeśli usunąłeś metodę z interfejsu, musisz znaleźć wszystkich implementatorów i użytkowników tej metody w klasach, które używają metody interfejsu lub dowolnej klasy, która implementuje tę metodę.

Program ApiChange może wyszukiwać implementatorów i użytkowników konkretnych metod w wierszu poleceń za pomocą komend -whoimplementsinterface i -wymówimów. Nie jest zautomatyzowany w linii poleceń, ale możesz bezpośrednio użyć ApiChange.Api.dll, aby zautomatyzować te zapytania.

Edit1:

po prostu zapomniał: Narzędzie ApiChange ma rzeczywiście functionality jesteś już zainteresowany. Jest to opcja

-ShowrebuildTargets -Nowy -old [-old2] -searchin

My używaliśmy go w naszym dziale z dobrymi wynikami. Jedynym problemem są pliki Intellisense XML.Jeśli inny cel nie użyje usuniętej metody, ale odwoła się do niej w XmlDoc, kompilator zapisze ostrzeżenie, że odwołano się do nieistniejącej metody. Jest to dość trudne do uchwycenia i wymagałoby przeanalizowania plików dokumentów intellisense. Ale jest to dość poważny przypadek.

+0

Czy to podejście zadziała, jeśli doda nowe przeciążenie, które może powodować niejednoznaczność wywołań metod w złożeniach korzystających z mojego interfejsu API? – username

+0

Zażycie kompilatora nie zostanie zerwane. Zakładam, że chcesz znaleźć przełomowe zmiany, które będą wymagały ponownej kompilacji. Może się zdarzyć, że podczas rekompilacji zostanie zastosowana inna metoda niż wcześniej, ale już zbudowane obiekty docelowe powinny być w stanie pracować z metodami, z którymi są już połączone. Jeśli chcesz dodać takie wsparcie, musisz wdrożyć części specyfikacji ECMA C#, aby poradzić sobie z przeciążeniami metod i jak rozwiązuje je kompilator C#. –

+0

Dzięki, właśnie przetestowałem sprawę opisaną w moim pierwszym komentarzu i działa dobrze – username

Powiązane problemy