当使用Mockito截尾时,我们通常为一个方法指定一个具体的参数。之后,我们可以用相同的参数调用Stubed方法。例如,在下面的html" target="_blank">代码中,get()用参数0进行了stubed。所以,当调用get()时,get()的参数也是0。因此,get()将返回一个整数,即3。
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock
private List<Integer> mockedList;
@Test
public void test() {
when(mockedList.get(0)).thenReturn(3);
int element = mockedList.get(0);
assertEquals(3, element);
}
}
如果调用语句被修改为:
int element = mockedList.get(1);
即参数更改为1,然后Mockito抛出“NullPointerException”,而不是“AssertionError”。null指针在哪里?
如果我们考虑抛出异常而不是返回值的情况,情况就更有趣了。如下面的代码所示,虽然get()的两个参数不同,但抛出的是'AssertionError'而不是'NullPointerException'。
@Test(expected = IndexOutOfBoundsException.class)
public void test() {
when(mockedList.get(0)).thenThrow(new IndexOutOfBoundsException());
mockedList.get(1);
}
似乎当论点不同时,摩基托就有不同的行为。
当执行mockedlist.get(1)
时,并且您还没有为此注册行为,它将返回一个默认值。默认情况下,Mockito将返回null
。
您的列表包含integer
元素,而不是int
元素(原语集合(目前)在普通Java中不可用)。
现在,由于您的int element=mockedlist.get(1)
,它将尝试从integer
自动解箱到int
。但是,由于该值为null
,它将以nullPointerException
失败。因为它将尝试对给定的integer
或在本例中为null
调用intvalue()
。
另请参见将Null-Object取消装箱为基元类型会导致NullPointerException,Fine?
要解决这一问题,使用integer
而不是int
将删除自动取消装箱并使其按预期工作。
@Test
public void testNoValue() {
when(mockedList.get(0)).thenReturn(3);
Integer element = mockedList.get(1);
assertEquals(3, element);
}
问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause
问题内容: 我试图将两个’Employee’对象添加到TreeSet中: 但是它抛出一个ClassCastException: 但是,如果我仅将一个对象添加到TreeSet中: 或者,如果我改用HashSet: 那就成功了。为什么会发生异常,我该如何解决? 问题答案: 要么必须实现,或者你需要提供一个比较创建时。 在文档中对此进行了详细说明: 插入排序集中的所有元素都必须实现接口(或被指定的比较器
问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节:
问题内容: 我有这种方法: 映射: Person.hbm.xml Cars.hbm.xml 此方法适用于单个线程,并且在多个线程上,给我一个错误: AOP交易: 注意:当我在更新后添加Thread.sleep(5000)时,就可以了。 但是这种解决方案并不干净。 问题答案: 我有汽车->(1-n)个地方。而且我在表位置(id_car)有一个外键。此外键没有索引。当我向该外键添加索引时,我的问题已解
下面是我的代码: 现在我的脑海中应该不会出现不匹配,因为显然提取了两个整数?!
我试图使用Mockito的Spy部分模拟一个服务,重写一个方法,使其返回一致的数据进行测试,但Say Spy无缘无故抛出一个UnfinishedStubbingException。 这是我的测试类: 这两个测试都失败了,指向指向