2011-11-04 74 views
1

我是新來的Stackoverflow,我想知道爲什麼幾乎每個人都用一個靜態main()和第一個答案輸出樣本代碼:some ugly main爲什麼你用main()和輸出代替JUnit測試編寫示例代碼

一些醜陋主:

但你張貼看起來它只是一個屬性文件。試試這個:

import java.io.FileInputStream; 
import java.util.Properties; 

public class Main { 
    public static void main(String[] args) throws Exception { 
     Properties properties = new Properties(); 
     properties.load(new FileInputStream("test.properties")); 
     System.out.println(properties.getProperty("ReferenceDataLocation")); 
     System.out.println(properties.getProperty("LicenseKey")); 
     System.out.println(properties.getProperty("foo")); 
    } 
} 

,它將打印:

as 
al 
null 

豈不是更好的把它寫的JUnit測試?它更容易閱讀。您可以使用CTRL + C + CTRL-V + RunAs - > JUnit來驗證結果,並查看預期結果(或不結果)。

我對這個想法有錯嗎?

我會寫的主要是這樣的:

import static org.hamcrest.MatcherAssert.*; 
import static org.hamcrest.Matchers.*; 

import java.io.ByteArrayInputStream; 
import java.util.Properties; 

import org.junit.Test; 


public class TestSomeInputStreamAsProperties { 

    String someFileAsString = 
    "ReferenceDataLocation = as\n"+ 
    "  \n" + 
    "  \n" + 
    "  ##############################################################################\n" + 
    "  #\n" + 
    "  # LicenseKey\n" + 
    "  #  Address Doctor License\n" + 
    "  #\n" + 
    "  ##############################################################################\n" + 
    "  LicenseKey = al\n"; 



    @Test 
    public void whenReadingFromSomeInputStreamWeShouldGetProperties() throws Exception { 
     // Arrange 
     Properties properties = new Properties(); 
     // Act 
     properties.load(new ByteArrayInputStream(someFileAsString.getBytes())); 
     // Assert 
     assertThat(properties.getProperty("ReferenceDataLocation"), is("as")); 
     assertThat(properties.getProperty("LicenseKey"), is("al")); 
     assertThat(properties.getProperty("foo"), is(nullValue())); 
    } 
} 

的問題是:爲什麼我會寫與main()和輸出的樣本?爲什麼用戶不試圖登陸JUnit列車並開始編寫測試來驗證他們的代碼?

+

另一個問題:爲什麼沒有人發表自己的JUnit測試的問題?

我有點失望。

編輯: - 不要誤解我的意思。這只是期望>現實;)我認爲stackoverflow仍然是一個很棒的網站,我會在這裏寫下我所有的問題,並試圖幫助別人解決他們的問題。我認爲,JUnit更加普及,您的社區應該重視解決JUnit問題。

相反,我意識到它不是想要的。 你也不會失望嗎?

+0

這是一個社區網站,因此而不是失望,爲什麼不作出貢獻,並做改變的事情?另外,它真的有很大的不同嗎?這裏要問的很大一部分問題是學生和那些沒有太多經驗的人,他們可能不知道JUnit或者它在測試之外的用途。 – spikeheap

+0

這是我的想法,這就是爲什麼我問這個問題。我開始用JUnit測試回答問題,自己寫UnitTests作爲問題,我很樂意將JUnit傳播到世界上,讓它成爲更好的地方。 – MartinL

回答

1

經驗豐富的開源開發人員在幾個高調項目的經驗 知道,獲得補丁批准和整合的最佳機會是提供失敗的單元 測試以及修復補丁。但是這樣的人主要是在這裏回答問題 - 而不是問。

因此,回答問題的任務是通過提出/降低問題和寫出有意義的評論來促進良好的問答實踐。

+0

你的意思是說我可以/應該用JUnit樣本提問嗎? – MartinL

+0

這取決於情況。在某個項目中報告問題最好是針對該項目進行單元測試(開發人員可以很容易地在自己的構建基礎架構中進行復制,而在補丁時更容易)。詢問一般問題可能是主要或單元測試的情況。大多數使用java的人都可以使用IDE,它可以輕鬆地運行提供的類作爲主要或單元測試 - IntelliJ IDEA不關心。 –

-1

好孩子,好問題。不要做一個壞男孩呢!運行醜陋的主體而不是JUnit或TestNG測試的人是壞男孩! :)

5

不是每個人都有JUnit,所以一個只有main()的簡單程序更可能在任何地方運行。

+0

我開始使用JUnit方法完全積極回答問題:SI想我會提供我的主要答案() – MartinL

+0

@MartinL你仍然可以使用'assert'關鍵字,所以感覺有點像一個單元測試:) –

1

JUnit測試不是SSCCE因爲它不是自包含的。

+0

我想的JUnit在那裏是最好的方式。您可以通過CTRL + 1將Eclipse導入JUnit4,或單擊。我不知道其他工具,如果他們有他們的劇目。 – MartinL

1

把它寫成JUnit Test不是更好嗎?

不是。

它更容易閱讀。

只有當你與那個特定的單元測試框架的經驗。而即使如此,我會說,它是一樣容易閱讀,並不容易。

您可以使用CTRL + C + CTRL-V + RunAs - > JUnit驗證結果,並查看期望的(或不是)。

只有當您使用IDE並且已經擁有一個包含該測試框架的項目時。

示例代碼應該表現出一個具體的東西,而不是引入額外的概念和依賴。

+1

你知道多少個IDE,幾乎默認情況下沒有啓用junit? –

+0

@Konstantin:他們所有人,我都打賭 - 並且注意你是如何使用「幾乎」這個詞的。 JUnit可能會出現,但通常不會自動包含在新項目中。畢竟,有些人會想使用TestNG。 –

+0

告訴我這是更容易閱讀: '系統出來的println性質的getProperty「ReferenceDataLocation」 ......這將打印「爲」'或'斷言,性能得到財產「ReferenceDataLocation」是「爲」'這是對JUnit和Hamcrest整件事 – MartinL

1

main()的一個(可能是唯一的)優勢是它是一種常見的最小分母 - 代碼應該是任何人都可以理解和重現的,無論他們的開發環境和最喜歡的測試框架是什麼(您可以打賭一些人會擁有一個專有的 - 因爲他們認爲JUnit是廢話,或狡猾的公司標準或其他)。但是如果你對JUnit感覺更加舒適,就這樣做 - 也許其他人會喜歡它並開始做同樣的事情。 「這是一個自由的世界......」