我想使用Mockito测试具有增强功能的Java方法。问题是,当我不知道如何设定增强功能的期望时。以下代码是从嘲笑谷歌组中的一个未解决的问题得到的:
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.mockito.Mockito;
import org.testng.annotations.Test;
public class ListTest
{
@Test
public void test()
{
List<String> mockList = Mockito.mock(List.class);
Iterator<String> mockIterator = Mockito.mock(Iterator.class);
when(mockList.iterator()).thenReturn(mockIter);
when(mockIter.hasNext()).thenReturn(true).thenReturn(false);
when(mockIter.next()).thenReturn("A");
boolean flag = false;
for(String s : mockList) {
flag = true;
}
assertTrue(flag);
}
}
for循环内的代码永远不会执行。为迭代器设置期望值不起作用,因为for的Java增强功能在内部未使用列表迭代器。为List.get()
方法设置期望也不会,因为增强的实现似乎也不会调用get()
列表的方法。
任何帮助都感激不尽。
模拟迭代器对我有用。参见下面的代码示例:
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Collection;
import java.util.Iterator;
import org.junit.Before;
import org.junit.Test;
public class TestMockedIterator {
private Collection<String> fruits;
private Iterator<String> fruitIterator;
@SuppressWarnings("unchecked")
@Before
public void setUp() {
fruitIterator = mock(Iterator.class);
when(fruitIterator.hasNext()).thenReturn(true, true, true, false);
when(fruitIterator.next()).thenReturn("Apple")
.thenReturn("Banana").thenReturn("Pear");
fruits = mock(Collection.class);
when(fruits.iterator()).thenReturn(fruitIterator);
}
@Test
public void test() {
int iterations = 0;
for (String fruit : fruits) {
iterations++;
}
assertEquals(3, iterations);
}
}
我正在尝试运行一个使用Mockito的JUnit cucumber测试。这是我遇到的问题。在我的cucumber赛跑课上,我有 在我的常规JUnit测试中 鉴于我一次只能有一个@RunWith,我如何将Mockito与cucumber结合使用呢?
我使用JUnit4和Mockito创建了一个Spring Boot2应用程序。当我测试某种方法时。会出现这样的例外: 这是我的测试代码 SuveryService.java SurveyRepository.java 我引用了这篇文章Mockito NullPointerException,但这个问题仍然存在。任何帮助都将被应用。
问题内容: 我想测试一个抽象类。当然,我可以手动编写一个从类继承的模拟。 我可以使用模拟框架(我正在使用Mockito)来执行此操作,而不是手工制作模拟吗?怎么样? 问题答案: 以下建议让你在不创建“真实”子类的情况下测试抽象类-Mock 是子类。 使用,然后模拟所有被调用的抽象方法。 例: 注意:此方法的好处是,你不具备实现的抽象方法,只要他们永远不会被调用。 在我看来,这比使用间谍更整洁,因为
我想测试一个返回可选客户机的方法。 我一直在跟踪这个链接Mockito错误,方法返回可选的
我有这个过滤器类,在使用junit进行测试时需要尽可能高的代码覆盖率。 和测试等级: 当我运行时,它在 线 我如何避免这种情况? 我需要调用这个方法并执行里面的任何内容来提供所需的代码覆盖。
我有下面一个班的方法。 使用mockito的junit测试用例将提供100%的代码覆盖率。