单元测试成员变量应该是私有的还是公共的?

时间:2014-10-15 11:27:06

标签: java junit

考虑以下(伪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

所以我使用的访问修饰符是否真的是任意的,或者我错过了什么?

1 个答案:

答案 0 :(得分:6)

这是品味和项目标准的问题,但我通常会遵循经验法则,如果没有良好理由,那么{{1} (或public,就此问题而言),它应该是protected。这可以防止其他测试错误地使用这些成员变量(同样,除非出现良好的原因)并且主要有助于为项目提供简化的外观 - 生产代码和测试代码遵循相同的标准。 / p>

编辑:
正如@dkatzel在评论中提到的那样(谢谢!),JUnit(或其他类似框架)注释注释的一些字段必须具有一组特定的修饰符。例如,注明private的字段必须为@Rule,注明public的字段必须为@ClassRule(至少来自JUnit 4.11。早期的4.x版本稍微宽松一些关于public static修饰符。)