在单元测试时,如何避免创建多余的字符串?

例如,字符串“ 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);


请注意,考虑到变量名称正确描述了其用途,字符串的内容变得无关紧要。

07-24 20:30