【问题标题】:Mockito when same parameter with different result?当相同的参数具有不同的结果时模拟?
【发布时间】:2019-04-05 11:46:50
【问题描述】:

我有一个具有build() 函数的builder 类,我正在为它传递一个服务。

我有一个构建器的测试类,它有两个方法

有没有办法用相同的参数测试两次但返回不同的值?

@Before
public void initTest() {
    MockitoAnnotations.initMocks(this);
}

@Test
private void test1{
    Mockito.when(defaultBuilder.build(service)).thenReturn(createObject());
}

@Test
private void test2(){  
    Mockito.when(defaultBuilder.build(service)).thenReturn(createDifferentObject());
}   

问题是我从第二次测试中得到了createObject() 对象,尽管我期待的是createDifferentObject()

【问题讨论】:

  • 发布一个完整的最小示例来重现该问题。我们必须能够将它复制并粘贴到我们的 IDE 中,然后运行它来重现问题。您发布的内容不是有效的 Java,而且非常不完整。
  • 我不确定你在问什么。这些不是测试。这些只是从未调用过的模拟调用。没有断言会发生任何事情。在较新版本的 Mockito 中,这只会引发异常,因为模拟是不必要的。
  • 重点是抽象掉所有无用的代码,问题描述得很清楚。将编辑代码。
  • "问题描述得很清楚" 你确定吗?两个不同的人评论说不清楚。将您的问题归结为基本要素固然很好,但您已经走得太远了,以至于没有足够的上下文来解释它。
  • 你的 defaultBuilder 是否被注释为@Mock?

标签: java junit mockito


【解决方案1】:

您可以在设置第二个值之前重置您的模拟:

https://static.javadoc.io/org.mockito/mockito-core/2.25.1/org/mockito/Mockito.html#resetting_mocks

但是,这被认为是测试概念不佳的标志。

【讨论】:

    【解决方案2】:
        public class Test {
    
        private MyObject myobject;
        private MyObject myDifferentObject;
    
        @Before
        public void initTest() {
            MockitoAnnotations.initMocks(this);
        myobject=createObject();
        myDifferentObject=createDifferentObject();
        }
    
        @Test
        private void test1{
            Mockito.when(defaultBuilder.build(service)).thenReturn(myobject);
        }
    
        @Test
        private void test2(){  
            Mockito.when(defaultBuilder.build(service)).thenReturn(myDifferentObject);
        }     
    
        }
    
    //should work.
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2022-08-05
      • 2012-04-26
      • 2013-05-29
      • 2019-10-17
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      相关资源
      最近更新 更多