相关疑难解决方法(0)

接口与抽象类(通用OO)

我最近接受过两次电话采访,其中我被问及接口和抽象类之间的区别.我已经解释了他能想到的每一个方面,但似乎他们在等我提一些具体的东西,我不知道它是什么.

根据我的经验,我认为以下是正确的.如果我错过了重点,请告诉我.

接口:

在接口中声明的每个单独的方法都必须在子类中实现.接口中只能存在事件,代理,属性(C#)和方法.一个类可以实现多个接口.

抽象类:

只有抽象方法必须由子类实现.Abstract类可以有实现的常规方法.Abstract类还可以在Events,Delegates,Properties和Methods旁边有类变量.由于C#中不存在多重继承,因此类只能实现一个抽象类.

  1. 毕竟,面试官想出了一个问题"如果你有一个只有抽象方法的抽象类怎么办?那么它与界面会有什么不同?" 我不知道答案,但我认为这是上面提到的继承权吗?

  2. 另一位采访者问我,如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同?我坚持认为你不能在界面中有一个公共变量.我不知道他想听到什么,但他也不满意.

另见:

oop abstract-class interface

1372
推荐指数
30
解决办法
69万
查看次数

使用Mockito测试抽象类

我想测试一个抽象类.当然,我可以手动编写一个继承自该类的模拟.

我可以使用模拟框架(我使用的是Mockito)而不是手工制作我的模拟吗?怎么样?

java abstract-class unit-testing mocking mockito

202
推荐指数
8
解决办法
15万
查看次数

测试抽象类

如何使用PHPUnit测试抽象类的具体方法?

我希望我必须创建某种对象作为测试的一部分.虽然,我不知道最好的做法,或者如果PHPUnit允许这样做.

phpunit abstract-class unit-testing

137
推荐指数
3
解决办法
5万
查看次数

如何使用JUnit在Java中测试抽象类?

我是JUnit的Java测试新手.我必须使用Java,我想使用单元测试.

我的问题是:我有一个带有一些抽象方法的抽象类.但是有些方法并不是抽象的.如何使用JUnit测试此类?示例代码(非常简单):

abstract class Car {

    public Car(int speed, int fuel) {
        this.speed = speed;
        this.fuel = fuel;
    }

    private int speed;
    private int fuel;

    abstract void drive();

    public int getSpeed() {
        return this.speed;
    }

    public int getFuel() {
        return this.fuel;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想测试getSpeed()getFuel()功能.

这个问题的类似问题在这里,但它没有使用JUnit.

在JUnit FAQ部分中,我找到了这个链接,但我不明白作者想用这个例子说些什么.这行代码是什么意思?

public abstract Source getSource() ;
Run Code Online (Sandbox Code Playgroud)

java junit abstract-class

82
推荐指数
6
解决办法
9万
查看次数

我们应该在接口(Java 8)中对默认方法进行单元测试吗?

我对Java 8中引入的接口中的默认方法实现感到有些困惑.我想知道是否应该专门为接口及其实现的方法编写JUnit测试.我试着谷歌,但我找不到一些指导方针.请指教.

junit unit-testing java-8 default-method

9
推荐指数
1
解决办法
4700
查看次数

带有继承和mixins的Scala可测试代码

我用Java开发了很多代码,并涉足Groovy和Haskell,现在我已经把我带到了Scala.

我对Scala的功能方面感到相对舒服,但我发现自己在Scala中的面向对象设计上有些不稳定,因为它感觉与Java有点不同,特别是由于特性/混合.

我的目标是编写尽可能可测试的代码,这在我的Java开发中一直都是关注的

  • 尽可能的不变性
  • 倾向于由构造者注入状态
  • 总是去构成而不是继承(受SO影响很大,可能对此帖子过度反应)

现在我正试图在这个新的Scala领域站起来,我很难弄清楚我应该采取什么方法,特别是我是否应该为某些目的开始使用继承.

编程Scala(Wampler和Payne; O'Reilly,第2版)有一个考虑因素("良好的面向对象设计:一个题外话"),我已经阅读了很多关于SO的帖子,但我还没有看到明确提到可测试性的设计考虑因素.本书提供了有关使用继承的建议:

  1. 抽象基类或特征由具体类(包括案例类)分为一级.
  2. 除了两种情况外,具体类永远不会被子类化:
    • 混合在特征中定义的其他行为的类(...)
    • 仅测试版本,以促进自动化单元投影.
  3. 当子类化似乎是正确的方法时,考虑将行为划分为特征并改为混合这些特征.
  4. 永远不要跨父子类型边界拆分逻辑状态.

对SO的一些挖掘也表明,有时混合比组合更好.

所以本质上我有两个问题:

  1. 是否有一些常见的情况,即使考虑可测试性,使用继承会更好?

  2. 混合是否提供了增强代码可测试性的好方法?

java oop unit-testing scala testability

9
推荐指数
1
解决办法
941
查看次数