2009-09-25 94 views
7

我需要編寫同一個應用程序的兩個版本,一個在.NET中,另一個在Java中。 所以我想編寫一個測試套件,然後將它用於兩個代碼庫。多語言測試框架

您會建議我使用哪種測試工具?

回答

3

在CLR和JVM上運行的語言還有其他一些選項。其中一些已經有自己的單元測試框架。

例如,紅寶石自帶Test Unit和存在於源兼容的版本都運行時(JRubyIron Ruby - 這兩者都是Ruby的1.8版本兼容)

會是一個很好的藉口,學習Ruby的,如果你還不知道它...

+1

說實話,我真的很想找一個藉口來學習Ruby.This可能就是這樣。我會檢查測試單元。 謝謝 – 2009-09-25 15:21:37

3

我看到了兩個策略:

  • 裹的代碼在某些類型的服務器進行測試,這樣你就可以調用方式來遠程測試。這將允許您使用任何測試套件。

  • 用J#或任何其他語言編寫測試,您可以輕鬆映射到.NET和Java。這意味着您只需編寫一次測試,然後將測試代碼「翻譯」成兩種不同測試框架可以理解的內容。

我建議先嚐試第二種方法。以更復雜的測試設置爲代價,它將使測試更快。第一種方法可能更容易設置,但它會使測試速度變慢,您需要在測試中的某個地方啓動並拆除服務器。

+1

我們主要是一個.NET商店,所以如果我們可以用CLR語言編寫測試,那對我們來說很容易。但是,我不想混淆測試代碼。理想情況下,我只會寫一次測試。 謝謝。 – 2009-09-25 08:12:10

+0

運行一個將代碼從一種語言翻譯成另一種語言的腳本(當這兩種語言非常相似時)並不是「搞亂」:) – 2009-09-25 08:19:09

+0

我想這是可行的,但是,我再一次寧願不必做編寫更多的支持代碼。儘管如此,我仍會考慮。 – 2009-09-25 08:38:42

6

有趣的問題..

我認爲,你可以使用的xUnit實現針對Java(JUnit的,最有可能的)和.NET。但是你的測試代碼必須寫成第三種語言,可能是簡單的DSL,用於你自己設計的測試。該語言將被轉換爲Java和C#源文件。

其他選擇是不要弄髒自己的語言,並採取一些現有的。例如。 Python具有兩種平臺的實現:Jython(Java)和IronPython(.NET)。所以你可以用這種語言編寫測試。 Python有自己的捆綁xUnit實現:unittest包。

+4

+1我喜歡使用Python的想法 – 2009-09-25 08:01:54

+0

設計我自己的DSL聽起來太複雜了,但我認爲python方法值得考慮。 謝謝 – 2009-09-25 08:07:09

+0

什麼是DSL? – jrharshath 2009-09-25 12:05:56

2

我只是不確定爲什麼你想要在Java和.NET中實現並行實現,並努力維護2個代碼庫。 Python確實提供了可編寫腳本的測試工具,但是在每個平臺上都有ceveats,即並非所有的核心python模塊都已經移植到java和ipython。

+0

這是一個商業決定。我們有客戶與Java或.NET技術綁定,並且大部分客戶不希望我們在他們的服務器上安裝外部到他們平臺的代碼。 – 2009-09-25 08:32:09

2

我覺得有趣的是,你正在尋找不重複單元測試的努力,但不是爲應用程序本身。爲什麼不用Java編寫應用程序核心&單元測試,然後使用ikvm,並且只在C#和Java中具有基於技術權限的單獨測試的UI級別。 (或者Grasshopper,如果你是.NET商店)?

+0

你說什麼是有道理的,但我不確定我是否相信任何第三方工具將代碼從一個平臺轉換到另一個平臺。我寧願控制正在發生的事情。此外,這兩個實現*應該是相當簡單的。 – 2009-09-25 09:07:56

+0

是否有任何針對這兩種環境的中性語言,並支持編譯爲本地字節碼選項? Python或Ruby說?您的客戶不需要知道(除非他們想要查看源代碼),因爲您只需提供編譯類和附加庫。 – 2009-09-25 10:49:05

3

Cucumber是編寫規範的好框架。這些規範由步驟定義支持,可以寫入驅動.net和java實現。

+0

聽起來很有趣。我會檢查出來的。 謝謝 – 2009-09-25 11:20:44

1

我是jni4net的作者,是JVM和CLR之間的開源內部進程橋。它建立在JNI和PInvoke之上。沒有C/C++代碼需要。我希望它能幫助你。

+0

看來jni4net將無法在linux盒子上工作,這是我的要求之一。 – 2010-04-23 08:26:32

+0

關於Mono的更多信息,請點擊: http://zamboch.blogspot.com/2010/04/jni4net-not-yet-on-mono-linux.html 想要與我們分享您的故事來支持您的案例嗎? – 2010-04-24 19:24:50

1

我建議重新檢查問題的粒度。它意味着單元測試,但爲什麼不去功能/系統級測試。在這種情況下,FIT成爲一種選擇。

作爲一個例子,我們在Java中有一個客戶端 - 服務器應用程序。我們使用FIT作爲備用客戶端:我們可以指定Html輸入文件和一些膠水(又名固件),我們可以打到服務器。

好消息是,這與服務器上的語言無關,並且可以將Html文件用作驗收測試。

壞消息是FIT只是一個框架:它可能需要大量的膠水。另外,必須認識到這些不是單元測試。粒度不僅不同,而且速度也不同。即從單元測試的角度來看,大量測試可能無法在「正常」時間內運行。 (我們CI構建過程中在夜間,只有一小部分運行我們的。)

0

而不是編寫應用程序的兩個版本,你可以在UML建模的情況,
然後用AndroMDA到正向工程模型爲獨立的Java和。淨實現。

AndroMDA使用的方法促進包含單元測試。