相关疑难解决方法(0)

如何对抽象类进行单元测试:使用存根扩展?

我想知道如何对抽象类进行单元测试,以及扩展抽象类的类.

我应该通过扩展它来测试抽象类,删除抽象方法,然后测试所有具体方法吗?然后只测试我覆盖的方法,并在单元测试中测试扩展我的抽象类的对象的抽象方法?

我是否应该有一个抽象的测试用例,可以用来测试抽象类的方法,并在我的测试用例中为扩展抽象类的对象扩展这个类?

请注意,我的抽象类有一些具体的方法.

java testing abstract-class unit-testing

429
推荐指数
6
解决办法
14万
查看次数

抽象类与特质的区别

可能重复:
Scala特征与抽象类

抽象类和特征之间的概念差异是什么?

abstract-class scala traits

91
推荐指数
4
解决办法
5万
查看次数

Mixins vs scala中的成分

在java世界中(更确切地说,如果你没有多重继承/ mixins),经验法则很简单:"赞成对象组合而不是类继承".

如果你还考虑mixins,我想知道它是否/如何改变,特别是在scala中?
mixins被认为是多重继承的方式,还是更多的类组合?
是否还有一个"赞成对象组成超类组成"(或其他方式)指南?

当人们使用(或滥用)mixins时,我已经看到了一些例子,当对象组合也可以完成这项工作时,我并不总是确定哪一个更好.在我看来,你可以用它们实现非常相似的东西,但也有一些差异,一些例子:

  • 可见性 - 使用mixins,一切都成为公共API的一部分,而不是组合的情况.
  • 冗长 - 在大多数情况下,mixins不那么冗长,也更容易使用,但情况并非总是如此(例如,如果你也在复杂的层次结构中使用自我类型)

我知道简短的回答是"它取决于",但可能有一些典型的情况,当这个或那个更好.

到目前为止,我可以提出一些指导原则(假设我有两个特征A和B,A想要使用B中的一些方法):

  • 如果你想用B中的方法扩展A的API,那么就是mixins,否则就是组合.但是,如果我创建的类/实例不是公共API的一部分,它就无济于事.
  • 如果你想使用一些需要mixins的模式(例如Stackable Trait Pattern),那么这是一个简单的决定.
  • 如果你有循环依赖,那么mixins与self类型可以提供帮助.(我尽量避免这种情况,但这并不容易)
  • 如果你想要一些动态的,运行时决定如何组合然后对象组合.

在很多情况下,mixins似乎更容易(和/或更简洁),但我很确定它们也有一些陷阱,比如"神级"和其他两篇artima文章中描述的其他:第1 部分,第2部分(BTW it在我看来,大多数其他问题与scala不相关/不那么严重.

你有更多这样的提示吗?

scala composition mixins

77
推荐指数
2
解决办法
8391
查看次数