注意:
此答案最初是针对以下问题而发布的:单独进行单元测试是否是通过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());
}
}