2 回答
![?](http://img1.sycdn.imooc.com/545850c80001ebf202200220-100-100.jpg)
TA贡献1875条经验 获得超3个赞
这里没有答案:你走错了路(至少对于给定的例子):
意思是:当你创建一个“API”时,你要实现“易于使用,难以误用”。需要按特定顺序调用方法的 API 无法实现这一点。因此:感觉需要以编程方式检查订单可能表明您正在做“错误的事情”。您应该设计一个“做正确的事情”的 API,而不是期望您的代码的用户为您做这件事。
除此之外:当您正在测试列表,你绝对不希望使用摆在首位嘲讽。
您想确保元素以特定顺序添加到列表中吗?然后一个简单的
assertThat(actualList, is(expectedList));
是您的测试应该检查的唯一一件事!
意思是:不是测试实现细节(add()
使用这个和那个参数,按这个和那个顺序调用),你只需检查该操作的可观察结果。你不关心添加的顺序,也许重新设置和更新,你只关心最终的结果!
鉴于 OP 的评论:当您必须“按顺序”处理某些调用/对象时,您应该设计一个允许您传达该意图的界面。您只是通过单元测试来测试您的意图。这当然是一个好的开始,但还不够!
基本上,有两个概念可以为您工作:
序号:当对象按顺序进入时,顺序很重要,那么每个对象都应该收到一个唯一的(最好是升序的)序号。然后每个处理元素的步骤都可以简单地记住最后处理的序列号,如果进入的是较低的序列号,则抛出异常。
“命令”的序列。OP 希望确保方法调用按顺序发生。这根本不是一个有用的抽象。相反:可以创建一个
Command
类(执行“某事”),然后为每个所需的活动创建不同的子类。然后您的处理器只需创建一个List<Command>
. 现在测试归结为:生成这样一个序列,并检查每个条目是否属于给定类型。
添加回答
举报