我认为这就是作者的意思。
在我的代码示例中,我有一个计时窗口,该窗口需要一个输出量加上一个开始和停止时间。目的是在24小时的时间跨度内绘制输出窗口。当开始时间大于停止时间时,会添加皱纹,因为这是一个跨越午夜的计时窗口。
您可以编写可以充分利用对象的单元测试,而无需暴露私有变量。这些私密性和时间跨度是他在公开内部进行单元测试时所指的合作者。根据这本书,暴露这些内部结构不会带来代码异味,因为它们是合作者。
公开double output
会带来代码异味,因为它不是协作者-这是类本身明确隐藏的元素,其中包含条件逻辑GetOutput
来确定应返回的内容。
深入了解布尔/时间跨度将使单元测试更加全面。他说这很好。
深入研究双重output
可能需要在单元测试中附加逻辑,以反映GetOutput
正在执行的操作。这就是他所指的代码味道。
公共类TimeWindow
{
私人布尔isConst;
私人布尔跨度
私有TimeSpan start1;
私人TimeSpan stop1;
私有TimeSpan start2;
私人TimeSpan stop2;
私有双输出;
公共TimeWindow(翻倍,TimeSpan开始,TimeSpan停止)
{
输出=输出;
if(开始==停止)
isConst = true;
否则if(开始>停止)
{
spansMidnight = true;
start1 =午夜;
stop1 =停止;
start2 =开始;
stop2 =午夜;
}
其他
{
start1 =开始;
stop1 =停止;
}
}
公共double GetOutput(TimeSpan time)
{
//这里关于如何返回的逻辑
...
返回输出;
}
}