Bootstrap

java 单元测试 私有成员变量,公开私有方法以对其进行单元测试……好主意?

注意:

此答案最初是针对以下问题而发布的:单独进行单元测试是否是通过getter公开私有实例变量的充分理由?它已合并到此示例中,因此可能是针对此处显示的用例的一点点。

一般而言,我通常都会重构“生产”代码以使其更易于测试。但是,我认为这不是一个好电话。一个好的单元测试(通常)通常不必关心类的实现细节,而只关心其可见行为。不必将内部堆栈暴露给测试,而是可以测试该类在调用first()或之后以您期望的顺序返回页面last()。

例如,考虑以下伪代码:

public class NavigationTest {

private Navigation nav;

@Before

public void setUp() {

// Set up nav so the order is page1->page2->page3 and

// we've moved back to page2

nav = ...;

}

@Test

public void testFirst() {

nav.first();

assertEquals("page1", nav.getPage());

nav.next();

assertEquals("page2", nav.getPage());

nav.next();

assertEquals("page3", nav.getPage());

}

@Test

public void testLast() {

nav.last();

assertEquals("page3", nav.getPage());

nav.previous();

assertEquals("page2", nav.getPage());

nav.previous();

assertEquals("page1", nav.getPage());

}

}

;