当前位置: 首页 > 面试题库 >

模拟类与模拟其接口

冉子石
2023-03-14
问题内容

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

public class DataAccessImpl implements DataAccess {
    ...
}

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

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

DataAccess client = mock(DataAccess.class);

DataAccess client = mock(DataAccessImpl.class);

在测试方面有什么不同吗?首选的方法是什么?


问题答案:

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

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



 类似资料:
  • 问题内容: 我正在尝试模拟DateTimeFormatter类。我已经完成以下工作: 用它格式化。然后,格式化的字符串将进一步用于生成另一个字符串。我需要确保正确生成字符串。因此,我需要从格式化程序返回一个一致的日期,或者模拟LocalDateTime.now(..)静态方法 我究竟做错了什么? 问题答案: 模拟的替代方法是将时钟注入您的类并更改您的(或添加另一个)构造函数,如下所示: 然后在您的

  • 问题内容: 由于外部库不公开接口(因此不是可模拟的),而仅公开纯函数,因此我很难在Go中编写单元测试。即使像Google这样的大公司也没有,所以我想知道我的方法是否足够好。库不是提供s而不是仅提供函数的包以便用户模拟它们的好习惯吗? 到目前为止,我想到的解决方案是将这些程序包与接口的实现包装在一起,但这似乎工作量太大。 我举一个例子。我的功能可能看起来像这样 其中session是一个导入的包,返回

  • 我们在C类中有以下方法: A是另一个类。在A中,我们有一个声明为类A1类型的变量(我认为这使得A成为一个聚合类)。我已经将以下对象定义为模拟对象: 而且 如果模拟A1对象并在when/verify中使用它的语法是正确的,请您提供帮助? 另一个问题是,如果没有必要为a1创建mock,应该使用哪种语法?例如,下面的可以吗? 谢谢

  • 我们有一些传统的laravel项目,它们在类中使用正面。 我们最近的项目使用了底层laravel类的依赖注入,facades所代表的类正如Taylor Otwell自己所暗示的那样。(我们对每个类使用构造函数注入,但为了保持示例简短,这里我使用方法注入并使用单个类。) 我知道外表是可以被嘲笑的 这对单元测试很有效。我试图理解的问题是,这些门面是否被“全球”嘲笑。 例如,让我们假设我正在编写一个集成