2010-06-14 86 views
2

我正在繼續開發序列化圖層生成器。用戶輸入類型描述(當前位於XSD或WSDL中),軟件以特定的目標語言(當前爲Java和ansi C89)生成代碼,該代碼能夠表示描述的類型,並且能夠序列化(變成一個字節序列)並反序列化這些值。由於生成代碼非常棘手(我的意思是,編寫代碼很困難,編寫代碼的代碼是編寫代碼來完成一件艱難的事情,這是一個全新的硬度:))。因此,在我的碩士論文之前的項目中,我們決定要進行一些系統測試。在構建過程中集成系統測試

這些系統測試知道類型和數量的值和字節序列對。爲了以某種語言執行系統測試,類型在系統中運行,導致如上所述的代碼。然後將該代碼與一些手寫的主機代碼鏈接起來,該主機代碼能夠讀取這些字節序列和值對,並用於讀取字符串中給定值的值。然後運行生成的可執行文件,並將字節值對輸入到此可執行文件中,並檢查所有此類綁定是否導致輸出「Y」。如果是這種情況,那麼這些類型的示例值序列化爲先前定義的字節序列,並且我們可以得出結論,生成的代碼編譯並正確運行,因此整體而言,處理此類型的系統部分是正確的。這是一件非常好的事情。

但是,現在我對目前的實現有點不滿意。目前,我已經編寫了一個定製的junit runner,它使用了相當多的反射魔法,以便從類屬性中讀取這些字節值綁定。而且,生成代碼的整個堆棧需要大量的樣板代碼和樣板類,它們只能包含兩個或三個字符串。更糟的是,很難與基於Junits描述並生成測試失敗報告的所有工具進行良好集成。如果有用的maven Junit testrunner或eclipse測試運行器吞噬了編譯器拋出的任何錯誤,僅僅因爲此錯誤的格式與junit自己的斷言錯誤不同,實際上很難調試正在發生的事情。

更糟糕的是,生成的代碼中的單個失敗測試會導致maven構建失敗。這非常煩人。我喜歡它,如果Maven構建失敗,如果一個不同的單元的某個測試失敗,因爲(例如),如果某個深度的第一次預先計算失敗,出於某種原因,一切都會失控。但是,如果我只是想向某人展示某些我生成的代碼,那麼如果我無法快速構建應用程序,因爲我現在正在處理的類型尚未完成,那麼這非常煩人。

因此,在這樣的背景下,我如何獲得一個很好的自動化系統來檢查這些生成規範?可能性我有considererd:

  • JUnit的集成解決方案似乎是不太理想的,除非我能提高行家和JUnit和JUnit與我的亞軍和其他一切的整合。
  • 我們之前使用過fitnesse,但總體上放棄了它,因爲它造成了比解決問題更多的問題。我們遇到的主要問題是集成到maven和hudson中。
  • 使用texttest的解決方案。我並不完全相信,因爲這主要是想要一個可執行文件,字符串將stdin和字符串放在stdout上。添加整個「運行應用程序,鏈接主機代碼,然後運行生成的可執行文件」似乎有點複雜。
  • 寫我自己的解決方案。這當然會起作用,做我想做的事情。但是,像往常一樣,這將是最耗時的任務。

所以......你看到另一種可能的方式來做到這一點,而避免寫自己的東西?

回答

0

您可以使用-Dmaven.test.skip = true運行Maven。 Netbeans有一種方法可以自動設置它,除非你明確命中某個命令來測試項目,我不知道Eclipse。