Java 将Mockito return设置为除某个值之外的任何整数

Java 将Mockito return设置为除某个值之外的任何整数,java,mockito,Java,Mockito,具体来说,我试图返回任何不等于1的整数。目前我有: Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenReturn(0.0); 但我想要的是: Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenReturn(anyInt() != 1); 最好的解决方案是得到一个范围从2到任意值的随机数 应该是这样的: Random rand = new Random(); int n = rand.nex

具体来说,我试图返回任何不等于1的整数。目前我有:

Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenReturn(0.0);
但我想要的是:

Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenReturn(anyInt() != 1);

最好的解决方案是得到一个范围从2到任意值的随机数

应该是这样的:

Random rand = new Random();
int  n = rand.nextInt(50) + 2;
Mockito.when(dsIn.getItemNumber(1, "COLUMN")).thenReturn(n);

这样,您将得到一个介于2和50之间的随机数。

您并不希望每次运行测试时测试用例都有所不同。您希望它们是可复制的,这样当您的测试失败,然后您重新运行测试时,您会因为与以前相同的原因得到相同的失败

如果要确保除1以外的所有int都有效,可以在所有值上编写for循环,也可以选择一些有趣的值,如0、2、-1、Integer.MAX_值等。无论哪种方式,都应该明确说明要测试的值,而不是隐式说明不是这个值的值

或者,您可以随机选取一个数字,并对其进行硬编码。它仍然是随机的:


三个问题:1为什么不返回一个不是1的值?2你测试的是什么,你需要它是除1之外的所有值?您可以编写一个否定测试来捕获1场景吗?你为什么要嘲笑这个?模拟有自己的位置,但我对您的测试场景最担心的是,这不是一个用于模拟的场景。返回任何不等于1的整数意味着类似于随机整数的东西!=1?@MatheusMohr YesWell那么,使用Math.random,生成一个随机整数,返回它,就这么简单。最快的方法是生成一个随机整数,在它上面使用+2,这样它总是2或更多,然后返回它,但按照这个逻辑,你可能会找到更好的方法。我同意@Daniel Pryden的观点,尽管有几种方法可以实现这种随机性,但你的单元测试应该更具体,即使这意味着增加一些看起来相似的测试,nextInt50+2也会给你一个介于2和51之间的数字,对吗?此外,我不同意这是解决问题的最好办法。