首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Junit @ParametrizedTest:使用参数作为模拟对象的返回值

Junit @ParametrizedTest:使用参数作为模拟对象的返回值
EN

Stack Overflow用户
提问于 2022-10-27 18:37:26
回答 1查看 20关注 0票数 0

我正在用Junit写一个ParametrizedTest。该测试的论据来自于一个枚举源。

我希望用该枚举构造一个对象,并使模拟的方法返回该对象。

然而,当我尝试这样做时,我得到(我认为是)一个不相关的错误消息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced or misused argument matcher detected here:  

You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
verify(mock).someMethod(contains("foo"))

以下是代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static enum CodeEnum {
   S1("S1"),
   S2("S2)
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
   
   @Mocked
   MockedObject mockedObject;
   
   @InjectMocks
   Foo underTest

   @ParameterizedTest
   @EnumSource(CodeEnum.class)
   public void test_ParametrizedTest(CodeEnum enum) {
      
      Output expectedReturn = Output.builder().code(enum).build();
      
      // Given
      when(mockedObject.method(any()))
          .thenReturn(expectedReturn);
      
      // when 
      val result = underTest.method();
      
      // then
      assertEquas(enum, result.getCode())

   }

}

我怀疑输入不应该是any(),所以我创建了一个为测试提供数据的方法,并使用了@MethodSource注释。

该方法将输入的参数返回给模拟,并从模拟返回expectedReturn。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   @RunWith(MockitoJUnitRunner.class)
   public class FooTest {

      @Mocked
      MockedObject mockedObject;

      @InjectMocks
      Foo underTest

      @ParameterizedTest
      @MethodSource("dataProvider")
      public void test_ParametrizedTest(MockedInput mockedInput, Output expectedReturn) {

         Output expectedReturn = Output.builder().code(enum).build();

         // Given
         when(mockedObject.method(mockedInput))
            .thenReturn(expectedReturn);

        // when 
        val result = underTest.method();

        // then
        assertEquas(enum, result.getCode())

   }
   
   private static Stream<Arguments> dataProvider() {
      return Stream.of(
               Arguments.of(mockedInput1, Output.builder().code(CodeEnum.S1).build()),
               Arguments.of(mockedInput2, Output.builder().code(CodeEnum.S2).build())
      )
   }

}

如何使模拟对象从参数化测试返回参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-31 20:51:58

我所用的跑步者是不正确的。我将其更改为使用MockitoExtension,测试运行良好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ExtendWith(MockitoExtension.class)
public class FooTest {

      @Mocked
      MockedObject mockedObject;

      @InjectMocks
      Foo underTest

      @ParameterizedTest
      @MethodSource("dataProvider")
      public void test_ParametrizedTest(MockedInput mockedInput, Output expectedReturn) {

         Output expectedReturn = Output.builder().code(enum).build();

         // Given
         when(mockedObject.method(mockedInput))
            .thenReturn(expectedReturn);

        // when 
        val result = underTest.method();

        // then
        assertEquas(enum, result.getCode())

   }
   
   private static Stream<Arguments> dataProvider() {
      return Stream.of(
               Arguments.of(mockedInput1, Output.builder().code(CodeEnum.S1).build()),
               Arguments.of(mockedInput2, Output.builder().code(CodeEnum.S2).build())
      )
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74230080

复制
相关文章
python中字典的练习
源代码如下: #!/usr/bin/env python #Filename:addressbook.py adbook={'alice':100,'bob':101,'chanel':102} while True:     choice=raw_input("Please input l:list,f:find numuber,e:exit the program: ")     if  choice == 'l':         print "The addressbook is %s" % adb
py3study
2020/01/14
2K0
python中的yield的简单练习
前一段时间对python的实践并不太多,主要做一些页面的效果,还有关于pdf的打印。前面的工作算是告一段落了,后面需要拿起来python干活了。有空就写写代码实践一下。
the5fire
2019/02/28
8880
Think in 递归
     网上写递归的文章可以用汗牛充栋来形容了,大多数都非常清晰而又细致的角度上讲解了递归的概念,原理等等。以前学生的时候,递归可以说一直是我的某种死穴,原理,细节我都懂,但是不管是在如何运用或者如何试试算法题上真是有一种“听过好多道理,依然过不好这一生的感觉”。经常感觉信心受挫,力不从心呐。但是到后来如果不要去太纠结这些细节,原理反而豁然开朗,突然我发现我可能是明白了。所以我的这篇瞎扯是想从一个宏观的角度来扯扯递归算法,所以我起了这么个土洋结合的题目,因为全因为的话显得略装b,但是我又实在找不到合适而又
一心一怿
2018/04/16
8000
think in java一_Think in Java(一):Java基础「建议收藏」
(1) 寄存器: 速度最快, 数量有限, 它位于CPU内部, 但我们不能直接控制它。在C,C++中允许你向编译器建议寄存器的分配方式。
全栈程序员站长
2022/09/08
2470
【学习】Think SAS(二)
第一篇“Think Sas”中的“Think”,纯粹做“考虑”解,说,诸君如果为工作计,不妨考虑下SAS。下面说些关于SAS本身的一些思考与认识。俗话说,人类一思考,上帝就拍砖。上一篇是纯劝导型,这一篇就是求拍砖型。 0.总结与回应 在展开讨论之前,希望大伙对“事实问题”而不是“价值问题”能有一个统一的认识,这也是我对上篇各位的评论的一个总结与回应。 0.1 功能:SAS 与R 一些朋友询问SAS或R或其他软件功能的优劣,然后决定自己应该着手学哪个。这是一个
小莹莹
2018/04/18
1.3K0
【学习】Think SAS(二)
【学习】Think SAS(一)
为什么你应该学Sas?本文不想卷入SAS与R,或者与SPSS、S-Plus、Matlab等统计软件孰优孰劣的争论中去,我是说,作为一个有志于投身工业界的统计分析人员,你为什么应该把SAS纳入你的分析工具箱?这会是一篇动员贴,尤其是对广大对数据分析感兴趣的在校生。在默认统计编程语言是R的“统计之都”,我需要拿上面这幅图来吸引眼球:学SAS吧。 R是好东西,不只是在COS,现在全世界的统计系和统计学生当中,R是主导性的学术语言。但不妙的是,国内高校学生中,学SAS的明显少了,医药、
小莹莹
2018/04/18
1.9K0
【学习】Think SAS(一)
Python的语法练习
实现一个猜数字游戏,首先使用 random 模块中的随机函数生成一个位于 [1, 100] 范围内的数字,然后让机器人玩家来猜,比较机器人玩家猜的数字和生成的随机数,如果随机数大于玩家猜的数字告诉玩家猜的数字过小,如果随机数小于玩家猜的数字告诉玩家猜的数字过大,直到玩家猜到正确的数字。
芯动大师
2022/11/15
1K0
Python的语法练习
Easyswoole中实现think-template模板引擎使用
本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.umdzz.cn
北溟有鱼QAQ
2019/12/19
1.2K0
python练习
myset = set(mylist)  #myset是另外一个列表,里面的内容是mylist里面的无重复 项
py3study
2020/01/09
1K0
python练习
问题:编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。
用户8442333
2021/05/25
5610
Think in Java之多态
导出类从基类继承而来,所以存在于基类中的接口也必定存在于导出类中。将导出类转换为基类称作“向上转型”,上是按照类的继承关系为方向的。
小柔
2022/10/09
2850
Python中21道个程序小练习
lambda 表达式也就是匿名函数,一些简单的功能需要实现的时候可以用匿名函数,一行语句体搞定。
Python学习者
2023/03/24
4940
Think in Java之内存分配
该区域是最快的存储区域,该位置位于处理器内部,但是数量并不是很多,C和C++允许向编译器建议寄存器的分配方式
小柔
2022/10/09
3350
Think in Java之复用
有一点需要注意:编译器并不是会为所有的引用都创建默认对象,引用会初始化的几个位置:
小柔
2022/10/09
2030
Think in Java之Interface
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
小柔
2022/10/09
1910
java基本数据类型 think in java_Think in Java(一):Java基础[通俗易懂]
(1) 寄存器: 速度最快, 数量有限, 它位于CPU内部, 但我们不能直接控制它。在C,C++中同意你向编译器建议寄存器的分配方式。
全栈程序员站长
2022/09/15
2300
python练习17
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时    共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 2.程序源代码:
用户8442333
2021/05/24
3900
python练习3
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后       的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码:
用户8442333
2021/05/24
3390
python练习20
问题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
用户8442333
2021/05/24
3050
python练习7
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个。不同字符,图形不一样。       2.程序源代码:
用户8442333
2021/05/24
2220

相似问题

使用javascript函数在div上应用CSS转换属性

20

在div上滚动时停止Javascript函数

222

Javascript:在div上执行的scrollBy函数

33

如何仅在div上应用javascript

11

在javascript函数中的div上设置焦点

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文