当前位置: 首页 > 知识库问答 >
问题:

Mockito - 没有内部方法的测试方法

席言
2023-03-14

我有下面的课

public class EmailManager{

  protected String getEmailContent(String content,String image){
     String result = content.toPrettyLook(); //this is an inner method
     result+="<img src='" + +"' />";
     return result;
  }

  protected String getImageLocation(String image){
      //write image to disc
      return newLocation;
  } 
}

public class EmailManagerTest{

  EmailManager emailManager;

  @Test
  public void testEmailContent(){
     String result = emailManager.getEmailContent("Hello World");
  }
}

>

  • 我应该在EmailManager上方添加什么注释?@Spy@Mock还是@Autow的?

    如何告诉Mockito不要执行getImageLocation(getEmailContent正在调用的方法)并且总是返回而不是“new location”?我看了很多文章,搞不清“什么时候”“存根”“退货”

  • 共有1个答案

    乐正嘉瑞
    2023-03-14

    这里需要的是Spy:一个部分模拟的对象。您想测试真正的getEmailContent()方法,但您想存根同一对象的getImageLoction()方法。所以测试应该看起来像

    public class EmailManagerTest{
    
        private EmailManager emailManager;
    
        @Test
        public void testEmailContent(){
            emailManager = spy(new EmailManager());
            doReturn("new location").when(emailManager).getImageLocation("someImage");
            String result = emailManager.getEmailContent("Hello World", "someImage");
            // assertions ...
        }
    }
    

    如果您想使用注释让Mockito为您创建间谍,那么您可以使用间谍注释:

    @Spy
    private EmailManager emailManager = new EmailManager();
    

    不要忘记添加一个调用< code > mockito annotations . init class(this)的@Before方法。

    莫奇托有很好的记录。读留档。

     类似资料:
    • 因为这个方法是在运行时执行的,所以需要对它进行测试吗

    • 您好,我有一个将人员添加到团队的方法。我想为此方法编写一个测试,但我是junit/mockito测试的新手,所以我有很多问题:这是我的添加方法: 这两个实体(人员/团队)之间存在关系,这是我的测试代码,但它不起作用: 模拟组合:

    • 我是莫基托的新手。我试图通过模拟数据库交互为服务编写jnuit: 我有下面的类(只是实际类的代表) 我的测试课就像是 但是当我运行这个测试时,它仍然调用实际的db调用并从DB中检索值,而不是模拟值,我应该模拟sql连接和非默认构造函数吗?我一无所知。 -- 更新 正如人们所建议的那样,我将DAO实例化移动到我的服务构造函数中,并且还使用了Spy,但是我仍然调用了实际的DB调用而不是模拟调用。

    • 我正在尝试测试一个带有空数据库/没有从数据库返回任何内容的场景。 我用mockito编写了一个junit4测试类。有一个由Mockito创建的服务类和dao类。一开始,我定义了“when”方法,它起作用了。后来,我试着拉出“when”方法调用,看看会发生什么,反正它起作用了。为什么? 当调用myService.getDistinctObjectList()时,myService类将调用myDao的

    • 问题内容: 我有一个要测试的类。只要有可能,我都会对该类进行依赖注入,该注入依赖于其他类的对象。但是,我遇到了一种情况,我想在不重新构造代码的情况下模拟对象,而不是应用DI。 这是要测试的课程: 我为此的测试课程是: 我想不出一种解决方案来模拟Dealer类中的打印对象。自从我在Test类中对其进行了模拟,但是它是在被测试的方法中创建的。我做了研究,但找不到任何好处。资源。 我知道从该方法中创建P

    • 问题内容: 这可能吗?我尝试过,但EasyMock抱怨时间必须> = 1 问题答案: 我设法提出了一个解决方案: