2016-04-19 69 views
0

在斷言中使用常量的主題類被認爲是不好的做法嗎?在測試類中使用斷言中的主題類的常量是否是一個好主意?

@Test 
public void testSubjectMethod() throws Exception { 
    Subject subject = new Subject() 

    String result = subject.subjectMethod(); 

    Assert.assertEquals(result, Subject.VALUE); 
} 

或者我應該在測試類中保留一個單獨的值並使用它?

private static final String SUBJECT_VALUE = "SUBJECT_VALUE"; 

@Test 
public void testSubjectMethod() throws Exception { 
    Subject subject = new Subject() 

    String result = subject.subjectMethod(); 

    Assert.assertEquals(result, SUBJECT_VALUE); 
} 
+0

除了明顯違反DRY和創建微妙錯誤雷區的重複以外,你認爲你正在用這樣的數據複製完成什麼。 –

回答

1

是的,你的測試,利用主題類常量的原因有兩個:

  • 在整個測試中使用恆定的保證,如果你改變了常量的值,可以更改它無處不在。相反,如果您在每個測試中重複了該值,則可能只更新一次該值而不是另一次,並且可能會導致未更新的測試通過,如果不應該,則會發生錯誤。這種考慮實際上只需要你在整個測試中使用相同的常量,而不是在你的測試和科目類中它們是相同的常量,但是如果你在課程類中有常量,那麼你也可以在測試中使用它。

  • 該常數明確表示該值對於程序以及如何使用它很重要。命名常量的方式使得他們在測試中的角色,而不僅僅是他們在實現中的角色。在測試中使用它們會給命名帶來正面的壓力。

然而,

  • 不要使用從隨便一個類中的常量在測試中:主題類可能使用常量從另一個類,你可能需要的該值在主題類的測試中不變。但是,如果沒有其他理由在你的測試中提及其他類別,那麼不要僅僅爲了恆定而去做;這會不必要地將測試和實施結合起來。如果你不想引用的類有一個你不想複製的有意義的常量,把它移到你不介意引用的類(可能是測試的主題)或新的常量類,並從那裏使用它。

  • 不要在測試中使用提供主題類行爲的複雜部分的常量。這樣做會使測試僅僅是實施的副本,從而降低了測試的能力。例如,在測試中使用主題類中使用的正則表達式常量可能不是一個好主意。相反,編寫測試表明類使用正確的輸入做了正確的事情,如果您重寫了不使用正則表達式的類,那麼仍會通過測試。

+1

我不明白「不要使用不會在測試中引用的實現類中的常量」。你能否試着用另一種方式來陳述它? – mattalxndr

+0

修訂。怎麼樣? –

+0

修訂版似乎暗示:「在您的測試中遵循德米特法則。」 – jaco0646

相關問題