模拟类与模拟其接口

2022-08-31 19:52:33

对于单元测试,我需要模拟几个依赖项。其中一个依赖项是实现接口的类:

public class DataAccessImpl implements DataAccess {
    ...
}

我需要设置一个此类的模拟对象,当提供一些指定的参数时,它将返回一些指定的值。

现在,我不确定的是,是否最好模拟接口或类,即

DataAccess client = mock(DataAccess.class);

断续器

DataAccess client = mock(DataAccessImpl.class);

它在测试方面有什么区别吗?首选方法是什么?


答案 1

在你的情况下,它可能没有太大区别,但首选的方法是模拟接口,因为通常如果你遵循TDD(测试驱动开发),那么你甚至可以在编写实现类之前编写单元测试。因此,即使您没有具体的类,您仍然可以使用接口编写单元测试。DataAccessImplDataAccess

此外,模拟框架在模拟类中具有局限性,并且某些框架默认情况下仅模拟接口。


答案 2

在大多数情况下,从技术上讲没有区别,您可以模拟为类,因此是一个接口。从概念上讲,由于更好的抽象,最好使用接口。


推荐