[英]Should unit test member variables be private or public?
考慮以下(偽ish)單元測試類。
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MyTest {
private static final int MY_CONSTANT = 7;
private Object object;
@Before
public void setUp() throws Exception {
object = new Object();
}
@Test
public void test1() {
Assert.assertEquals(MY_CONSTANT, object.property1);
}
}
我想知道的是,對於成員MY_CONSTANT
和object
使用哪種訪問修飾符,是否有最佳實踐。 在非測試類中,您顯然會盡可能少地暴露類內部,並使用private
修飾符。 但是,在單元測試中似乎並不重要,因此我們也可以將成員public
。
那么,我使用哪個訪問修飾符真的是任意的還是我遺漏了某些東西?
這是一個品味和項目標准的問題,但是我通常會憑經驗說,如果沒有充分的理由將其public
(或對此加以protected
),則應將其private
。 這樣可以防止其他測試錯誤地使用這些成員變量(同樣,除非有充分的理由,否則),並且主要有助於使項目看起來更簡潔-生產代碼和測試代碼遵循相同的標准。
編輯:
正如@dkatzel在注釋中提到的(謝謝!),一些由JUnit(或其他類似框架)注釋所注釋的字段必須具有一組特定的修飾符。 例如,用@Rule
注釋的字段必須是public
而用@ClassRule
注釋的字段必須是public static
(至少從JUnit 4.11起。早期的4.x版本對static
修飾符@ClassRule
松一些)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.