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

使用Mokito时,实际对象和模拟对象之间有什么区别?

都阳
2023-03-14
问题内容

在下面的程序中,我试图在测试用例中将mockito与html" target="_blank">junit一起使用。但是我看不到Mokito如何帮助创建用于测试的对象?我在这里看不到什么特别之处,因为好像mokito实例化了实际对象。

   public class TestCase1{

    @Mock 
    MyClass myClass;

    public void setup(){

       MokitoAnnotations.initMoks(this);

       }
       @Test
       public void testAddition(){

         when(myClass.add(2,2)).thenReturn(20);
         assertEquals(4,myClass.add(2,2));
      }
   }

我的实际班级( MyClass.java

    public class MyClass{
        public int add(int x, int y){
           return x+y;
        }
    }

它是在模拟对象,还是像在对象上注入(DI)一样?我感谢您的帮助!


问题答案:

您的测试不会测试您的任何代码。它测试Mockito是否工作正常。

当我介绍模拟的概念时,我以这个例子为例:假设您制造了一个雷管,并想要对其进行测试。当然,您可以将雷管与真实炸弹一起使用,并查看使用雷管时整个块是否爆炸。但这不是很实际。顺便说一句,也许您甚至没有炸弹可供使用。也许您的同事还在建造它。

因此,您使用模拟炸弹。请注意要点:要测试雷管,请使用模拟炸弹。不是模拟的雷管。被嘲笑的是被测类的 依赖关系 。不是测试中的类本身。

什么是模拟炸弹?这只是一枚无用的假炸弹。它所做的只是允许验证是否已被要求爆炸。因此,您测试雷管的代码将如下所示:

// create a mock bomb:
Bomb mockBomb = mock(Bomb.class);
// create a real detonator, but tie it to the mock bomb:
Detonator detonator = new Detonator(mockBomb);

// test the detonator. Since it's tied to a mock bomb, the block
// won't explode
detonator.pressTheRedButton();

// check it the mock bomb has been asked to explode, as it should 
// if the detonator works correctly
verify(mockBomb).explode();

现在,如果测试通过,您就会知道所使用的所有内部电路都pressTheRedButton()可以正常工作,并最终告诉炸弹爆炸。因此,您知道,当与真实炸弹一起使用时,按下红色按钮时,也会要求真实炸弹爆炸。

现在让我们回到现实世界:您想要测试服务,并且该服务使用DAO,该DAO需要一个装有数据的数据库才能正常运行。为了测试您的服务,您可以简单地模拟DAO,并验证它是否可以正常工作。模拟DAO也可以用作
存根
,即返回您告诉它在测试中返回的内容的对象,而不是实际查询数据库。这就是您在问题代码中所做的事情:您正在告诉模拟MyClass实例,当add()以2和2作为参数调用时,它应该返回4。

这使测试更易于设置,运行速度更快,并且独立于DAO的实际代码,而DAO并不是您要在服务的单元测试中测试的代码。



 类似资料:
  • 问题内容: 后者是否仅引用由自定义构造函数创建的非原始函数对象(例如,var bird1 = new Bird();)? 问题答案: 这两个术语在ECMAScript规范中定义: 本机对象 ECMAScript实现中的对象,其语义由此规范而不是由主机环境完全定义。 注:本规范中定义了标准本机对象。一些本地对象是内置的。其他的可以在执行ECMAScript程序的过程中构造。 宿主对象 主机环境提供的

  • 问题内容: 我是JSON和JavaScript对象的新手。 有人可以解释JSON和JavaScript对象之间的区别吗? 它们有什么用? 这个比那个好吗?还是取决于情况? 什么时候使用哪个,在什么情况下? 为什么首先创建JSON?它的主要目的是什么? 有人可以举例说明何时应该使用JSON而不是JavaScript对象,反之亦然吗? 问题答案: 首先,您应该知道什么是JSON: 它是与 语言无关的

  • 问题内容: 我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择对象类型还是“?”类型。 那么两者之间有什么区别? 和 问题答案: 匹配项的实例,但不是。假设您要编写一个接受Strings到任何内容的映射的方法:如果您要编写 您无法提供。如果你写

  • 问题内容: 谁能举例说明Javascript对象和JSON对象之间的区别? 问题答案: Javascript 对象 是Javascript 中的数据类型-仅在Javascript中才有意义。通常,您会看到这样的Javascript 对象文字 : JSON 字符串 是一种数据交换格式,它只不过是一串以特定方式格式化的字符(为了使不同的程序相互通信)。因此,它可以存在于Javascript或其他语言中

  • 本文向大家介绍window对象和document对象有什么区别?相关面试题,主要包含被问及window对象和document对象有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 document对象是window对象的一部分 document是用来操作dom元素的 window对象当你打开浏览器时就被创建,这个浏览器的所有东西都是window对象属性

  • 问题内容: 我一直在阅读《 清洁代码:敏捷软件技巧手册》 ,在第六章第95-98页中阐明了对象和数据结构之间的区别: 对象将其数据隐藏在抽象之后,并公开对该数据进行操作的函数。数据结构公开其数据,并且没有有意义的功能。 对象公开行为并隐藏数据。这使得在不更改现有行为的情况下添加新的对象变得容易。这也使得很难向现有对象添加新行为。 数据结构公开数据并且没有重大行为。这使向现有数据结构添加新行为变得容