考虑以下(伪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
。
所以我使用的访问修饰符是否真的是任意的,或者我错过了什么?
答案 0 :(得分:6)
这是品味和项目标准的问题,但我通常会遵循经验法则,如果没有良好理由,那么{{1} (或public
,就此问题而言),它应该是protected
。这可以防止其他测试错误地使用这些成员变量(同样,除非出现良好的原因)并且主要有助于为项目提供简化的外观 - 生产代码和测试代码遵循相同的标准。 / p>
编辑:
正如@dkatzel在评论中提到的那样(谢谢!),JUnit(或其他类似框架)注释注释的一些字段必须具有一组特定的修饰符。例如,注明private
的字段必须为@Rule
,注明public
的字段必须为@ClassRule
(至少来自JUnit 4.11。早期的4.x版本稍微宽松一些关于public static
修饰符。)