以 tdd 方式实现时,您是断言类的内部还是仅断言其公共 api?
假设我正在实现一个二进制堆。添加对象后,我想断言保留了堆属性。通过反射获得内部数组然后断言其内容是否有意义?IE
@Test
public void shouldPreserveHeapProperty() {
// when
heap.push(3);
heap.push(2);
heap.push(1);
// then
assertThat(Reflection.get(heap,"elements"))).contains(3,2,1);//made up Reflection class
}
或者也许通过它的公共api?但是每个测试都需要多个断言,即
@Test
public void shouldPreserveHeapProperty() {
// when
heap.push(3);
heap.push(2);
heap.push(1);
// then
assertThat(heap.pop()).isEqualTo(3);
assertThat(heap.pop()).isEqualTo(2);
assertThat(heap.pop()).isEqualTo(1);
}
更重要的是,您将如何实现并发代码的测试?有时在不访问内部锁的情况下很难模拟死锁或等待。