在单元测试时,如何避免创建多余的字符串?
例如,字符串“ SERIALIZED”似乎有点不必要和任意。您将使用什么呢?
Object update=new Object();
FileWriter writer=mock(FileWriter.class);
Serializer serializer=mock(Serializer.class);
when(cache.getWriter(update)).thenReturn(writer);
when(serializer.serialize(update)).thenReturn("SERIALIZED");
FileRecorder recorder=new FileRecorder(serializer);
recorder.receive(update);
verify(writer).write("SERIALIZED");
最佳答案
我不会调用您用来验证测试是否通过多余的字符串。但是,执行此方法需要一些重构:"SERIALIZED"
代表什么?您可以在两个月内回忆起它的目的吗?
您使用相同的字符串两次,简单的错字(发生)将破坏您的测试。那就是你要避免的事情
我建议将其重构为整个测试套件范围内的常数(如果仅在使用单个测试的地方使用,则在整个测试方法范围内)。并为其命名:
final String FAKED_SERIALIZER_OUTPUT = "Any random content";
Object update=new Object();
FileWriter writer=mock(FileWriter.class);
Serializer serializer=mock(Serializer.class);
when(cache.getWriter(update)).thenReturn(writer);
when(serializer.serialize(update)).thenReturn(FAKED_SERIALIZER_OUTPUT);
FileRecorder recorder=new FileRecorder(serializer);
recorder.receive(update);
verify(writer).write(FAKED_SERIALIZER_OUTPUT);
请注意,考虑到变量名称正确描述了其用途,字符串的内容变得无关紧要。