我一直在看杰克关于匕首的幻灯片。在第29页,他说'分开'做“来自”如何“'。具体是什么意思?它有什么好处?
https://speakerdeck.com/jakewharton/android-testing?slide=29
答案 0 :(得分:1)
如果我必须扩展句子,那就是:"需要做的代码'一个行动不应该知道'如何'该行动得以实现。"
这是一个基本原则,可以归入许多不同的短语,但最具体的可以解释为Java中的接口和实现。
在Java中使用Set
时,您会关注行为:每个元素只出现一次。 Java提供了Set
的多个实现。每个实现使用不同的技术来实现接口的契约:散列桶,树或位。
与Set
交互的代码只关心行为,而不关心它是如何实现的。
相同的语义可以应用于应用程序中的许多不同的东西。我最喜欢的例子是发布推文的内容。
interface Tweeter {
void postTweet(String message);
}
如果我是一个想发布推文的班级,我只关心它发送推文的能力。
public MyClass(Tweeter tweeter) {
this.tweeter = tweeter;
}
@Override
public void run() {
tweeter.postTweet("I'm a Runnable that's being run!");
}
如何发送推文?从MyClass
的角度来看,谁在乎!
在我的实际应用程序中,我当然会使用TwitterTweeter
(直接在实例化MyClass
时或通过依赖注入)。但是,我现在能够传入MockTweeter
我自己的实现来编写一个测试,断言当MyClass
run()
发布推文时。
这样的事情似乎显而易见,但看到代码(对于此示例)需要发布推文并确切知道如何执行此操作并不罕见。
在我离开之前,有两点要点: