2014-10-08 61 views
0

我正在開發一個程序,該程序將爲初學者程序員提供一種遊戲。我打算提供一個字段,用戶可以根據需要編寫代碼(方法,類...)。當用戶想要提交代碼時,我會將文本字段的內容複製到.java文件中,調用編譯器來編譯這個類,然後我想用jUnit測試代碼是否工作正常。使用jUnit測試尚未創建的類/對象

那麼,我知道jUnit是用於開發目的,但我認爲它可能是非常有用的在這種情況下執行它。

現在的問題是,當我需要編譯我的程序時,應該被測試的類(用戶的代碼)不會在那裏。所以我不能只是叫

assertEquals("Wrong sum", 6, Foo.sum(4, 2)); 

,因爲它不會知道Foo類是什麼,因爲它永遠不會在compilatoin的時間在那裏 - 在用戶運行應用程序,並開始編碼之前。

我想我可以創建一個虛擬類,只是爲了編譯,但是當我需要真實的東西時,我將無法替換文件或寫入另一個文件,如Foo2.java,因爲FooTest.java只能用對象Foo操作....

我真的很感激你的建議傢伙!我能做些什麼來處理這種情況?

謝謝:)

+1

你有沒有考慮過使用mockito - http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html – nbz 2014-10-08 16:59:12

回答

1

兩個選項:

  • 讓用戶實現一個接口,使用該接口在JUnit
  • 使用反射來從類中的公共方法,並調用它。

反思版本:

如果你要測試的類的實例(可能是Object型),使用getClass得到Class對象。然後使用getDeclaredMethods獲取Methods的列表。迭代Methods,直到找到想要測試的人(希望是唯一的公共方法)。

相關問題