2009-09-25 16 views
7

Potrzebuję napisać dwie wersje tej samej aplikacji, jedną w .NET, a drugą w Javie. Więc chciałbym napisać pojedynczy pakiet testowy, a następnie użyć go przeciwko obu bazom kodów.Ramy testowania wielu języków

Które narzędzie do testowania radziłbyś użyć?

Odpowiedz

3

Istnieje kilka innych opcji dla języków, które działają zarówno na CLR, jak i JVM. Niektóre z nich mają już własne ramy testów jednostkowych.

Na przykład Ruby wyposażony Test Unit i istnieje w źródle kompatybilne wersje zarówno dla środowisk wykonawczych (JRuby i Iron Ruby. - z których oba są Ruby 1.8 wersja kompatybilna)

byłby to dobry pretekst, aby dowiedzieć się Ruby, jeśli nie wiesz o tym ...

+1

Szczerze mówiąc, naprawdę chciałbym znaleźć pretekst, aby nauczyć się Ruby. To może być to. Sprawdzę jednostkę testową. Dzięki –

3

widzę dwie strategie:

  • zawinąć do testowania kodu w jakimś serwerze, dzięki czemu można wywołać metody przetestować zdalnie. Umożliwi to korzystanie z dowolnego zestawu testów.

  • Zapisz testy w języku J # lub innym języku, który można łatwo zmapować na .NET i Java. Oznacza to, że piszesz testy raz, a następnie "tłumaczysz" kod testowy na coś, co mogą zrozumieć dwie różne struktury testowe.

Proponuję najpierw wypróbować drugie podejście. To sprawi, że testy będą znacznie szybsze za cenę bardziej złożonego zestawu testów. Pierwsze podejście jest prawdopodobnie prostsze do skonfigurowania, ale spowolni testy i będziesz musiał uruchomić i zburzyć serwer gdzieś w testach.

+1

Jesteśmy głównie sklepem .NET, więc byłoby dla nas łatwe, gdybyśmy mogli napisać testy w języku CLR. Jednak nie chcę zadzierać z kodem testowym. Idealnie, chciałbym napisać test raz. Dzięki. –

+0

Uruchamianie skryptu, który tłumaczy kod z jednego języka na drugi (gdy te dwa języki są bardzo podobne) nie oznacza "zepsucia" :) –

+0

Sądzę, że jest to wykonalne, ale po raz kolejny wolę zrobić to bez konieczności napisz więcej kodu wsparcia. Rozważę to jednak. –

6

Ciekawe pytanie ..

myślę, że można użyć implementacje xUnit for Java (JUnit, najprawdopodobniej) i .NET. Ale twój kod testowy musi być napisany w jakimś trzecim języku, prawdopodobnie prosty DSL do testowania, który możesz sam zaprojektować. Ten język ma być przetłumaczony na pliki źródłowe Java i C#.

Inną opcją nie jest bałagan z własnym językiem i zajęcie już istniejącego. Na przykład. Python ma implementacje dla obu platform: Jython (Java) i IronPython (.NET). Możesz więc pisać testy w tym języku. Python ma własny pakiet implementacji xUnit: unittest.

+4

+1 Podoba mi się pomysł użycia Pythona –

+0

Projektowanie mojego własnego DSL brzmi zbyt skomplikowane, ale myślę, że podejście Pythona jest warte rozważenia. Dzięki –

+0

co to jest DSL? – jrharshath

2

Po prostu nie jestem pewien, dlaczego chciałbyś mieć równoległe implementacje w Javie i .NET i czynić nadmiarowość utrzymywania 2 baz kodów. Python zapewnia skryptowalną wiązkę testową, ale będzie mieć ceveats na każdej platformie, tj. Nie wszystkie podstawowe moduły python zostały przeniesione do java AND ipython.

+0

To jest decyzja biznesowa. Mamy klientów powiązanych z technologią Java lub .NET, a większość z nich nie chciałaby, abyśmy instalowali na swoich serwerach kod obcy dla ich platformy. –

2

To, co uważam za interesujące, to brak powielania wysiłków związanych z testami jednostkowymi, ale nie dotyczy samej aplikacji. Dlaczego nie napisać rdzeń aplikacji & testy jednostkowe, powiedzmy Java, a następnie użyć ikvm i tylko poziomy interfejsu w C# i Java z oddzielnymi testami jednostkowymi w oparciu o technologię właściwą dla każdego. (Lub Grasshopper jeśli jesteś sklepem .NET)?

+0

To, co mówisz, ma sens, ale nie jestem pewien, czy ufam jakiemukolwiek narzędziu strony trzeciej w celu przekształcenia kodu z jednej platformy na drugą. Wolę mieć kontrolę nad tym, co się dzieje. Poza tym obie implementacje * powinny * być całkiem proste. –

+0

Czy istnieją języki obojętne, które są kierowane na oba środowiska i obsługują opcję kompilacji na kod natywny? Python lub Ruby mówią? Twoi klienci nie musieliby wiedzieć (chyba, że ​​chcą spojrzeć na źródło), ponieważ dostarczałbyś tylko skompilowane klasy i dodatkową bibliotekę. –

3

Cucumber to doskonałe narzędzie do pisania specyfikacji. Specyfikacje są wspierane przez definicje kroków, które można zapisać, aby sterować zarówno implementacjami .net, jak i java.

+0

Brzmi intrygująco. Sprawdzę to. Dzięki –

1

Jestem autorem jni4net, open source intraprocess bridge między JVM i CLR. Jest zbudowany na JNI i PInvoke. Nie jest wymagany kod C/C++. Mam nadzieję, że ci to pomoże.

+0

Wygląda na to, że jni4net nie będzie działać na komputerach z Linux-em, jednym z wymagań, które mam. –

+0

Więcej informacji o Mono: http://zamboch.blogspot.com/2010/04/jni4net-not-yet-on-mono-linux.html Masz ochotę podzielić się z nami swoją historią, aby wesprzeć swoją sprawę? –

1

Polecam ponowne sprawdzenie ziarnistości Twojego pytania. Sugeruje to testowanie jednostkowe, ale dlaczego nie przejść do testowania na poziomie funkcjonalnym/systemowym. W tym kontekście wybór staje się FIT.

Jako przykład mamy aplikację klient-serwer w Javie. Używamy FIT jako klienta alternatywnego: możemy określić pliki wejściowe HTML, a przy użyciu niektórych klejów (zwanych też urządzeniami) możemy trafić na serwer.

Dobrą wiadomością jest to, że jest to nieobowiązujące dla języka na serwerze, a pliki HTML mogą być używane jako testy akceptacyjne.

Złą wiadomością jest to, że FIT to tylko ramy: może zająć dużo kleju. Należy również zdawać sobie sprawę, że nie są to testy jednostkowe. Różni się nie tylko ziarnistość, ale także prędkość jest inna. tj. Duży zestaw testów może nie działać w "normalnym" przedziale czasowym, z perspektywy testu jednostkowego. (Prowadzimy nasze w nocy i tylko niewielki podzbiór podczas CI kompilacji.)

0

Zamiast pisać dwie wersje aplikacji można modelować go w UML,
następnie użyć AndroMDA do przekazania zaprojektować swój model do oddzielnych Java i. implementacje sieciowe.

Metodologia wykorzystywana przez AndroMDA sprzyja włączeniu testów jednostkowych.

Powiązane problemy