簡體   English   中英

單元測試成員變量應該是私有的還是公共的?

[英]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_CONSTANTobject使用哪種訪問修飾符,是否有最佳實踐。 在非測試類中,您顯然會盡可能少地暴露類內部,並使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM