- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试为我们的 Servlet 创建测试。我 mock 过 HttpServletRequest
, HttpServletResponse
和一个用作数据库处理程序的对象。在对 doPost
的测试中方法,我的愿望是比较来自 Json 对象的值和发送到数据库对象的 ArrayList 的值。
小服务程序:
public class WidgetStatusServlet extends HttpServlet {
private DBController db = new DBController();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
JsonParser parser = new JsonParser();
JsonElement tradeElement = parser.parse(request.getParameter("widgetdata"));
JsonArray json = tradeElement.getAsJsonArray();
Gson gson = new Gson();
Type listType = new TypeToken<List<WidgetStatus>>() {
}.getType();
ArrayList<WidgetStatus> widgets = gson.fromJson(json, listType);
Iterator<WidgetStatus> iterator = widgets.iterator();
System.out.println("Widgets");
while (iterator.hasNext()) {
WidgetStatus node = (WidgetStatus) iterator.next();
System.out.println(node);
}
db.addWidgetStatus(widgets);
}
public class WidgetStatusServletTest {
@Captor
private ArgumentCaptor<ArrayList<WidgetStatus>> captor;
private DBController dbMock = mock(DBController.class);
private HttpServletRequest request = mock(HttpServletRequest.class);
private HttpServletResponse response = mock(HttpServletResponse.class);
Repository repository = mock(Repository.class);`
@Test
public void doPost_ShouldVerifyWidgetsIsProvided() throws Exception {
final WidgetStatus widget1 = new WidgetStatus("id1", "div_id1", "5", "5", "1", "2", false);
final WidgetStatus widget2 = new WidgetStatus("id2", "div_id2", "2", "1", "3", "1", true);
when(request.getParameter("widgetdata")).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
ArrayList<WidgetStatus> array = new ArrayList<WidgetStatus>();
array.add(widget1);
array.add(widget2);
String json = new Gson().toJson(array);
return json;
}
});
new WidgetStatusServlet().doPost(request, response);
verify(dbMock).addWidgetStatus(captor.capture());
assertNotNull(captor.getAllValues());
}
NullpointerException
在线
verify(dbMock).addWidgetStatus(captor.capture());
ArgumentCaptor
用法相同的示例。 .也许这只是一个小错误?
最佳答案
如果您使用 MockitoJUnitRunner
运行您的测试,然后是 ArgumentCaptor
将为您创建,并且无需显式初始化它。如果你这样做,那么你也可以使用 @Mock
注释来创建您的模拟对象,也就是说,您不需要 mock
不再使用静态方法。您的测试类(class)将像这样开始。
@RunWith(MockitoJUnitRunner.class)
public class WidgetStatusServletTest {
@Captor private ArgumentCaptor<ArrayList<WidgetStatus>> captor;
@Mock private DBController mockController;
@Mock private HttpServletRequest mockRequest;
@Mock private HttpServletResponse mockResponse;
@Mock private Repository mockRepository;
MockitoJUnitRunner
的问题,或显式调用
MockitoAnnotations.initMocks
.
关于java - Mockito ArgumentCaptor 在 verify() 上给出 NullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23310350/
我需要验证 ArgumentCaptor 没有捕获任何东西。有没有办法验证这一点? Mockito.verify( /* captor has not captured anything */ ) 最
accountHandler 类中有一个具有以下签名的方法 public void processMessage(String accountId, Metrics metrics, Optional
在测试中,我使用了模拟服务。我想检查是否使用其中一个参数的特定属性调用了一次服务。然而,该方法也被其他参数多次调用,但我只对上面的一次调用感兴趣。 我的目的是使用参数捕获器验证调用,以检查感兴趣的调用
我有一个我 mock 过的对象。该对象具有以下方法: > List execute(List list) 这个方法有两个调用: execute(List); execute(List); 类(clas
我正在尝试使用 Mockito 和 JUnit 来测试多线程应用程序。以下是一些有问题的代码: ArgumentCaptor messageCaptor = ArgumentCaptor.forCla
我尝试使用参数捕获来确定哪些参数被传递给模拟的 Mockito 方法,但我无法捕获任何值。 class CombinedEvent { final List events; public
我正在开发一个 Android 应用程序,使用 AndroidStudio,我希望有人能告诉我为什么我不能让 Mockito 使用 argumentCaptor.capture() 或 anyObje
我正在尝试使用 Mockito 来捕获“int”类型的参数。 这是我正在测试的代码: public class Client { private final Board board; priv
我必须测试一个使用可变对象的方法 private final List buffer; ... flushBuffer() { sender.send(buffer); buffer.clea
当我使用超过 1 个 ArgumentCaptor 参数时,我收到一个空指针。可能有人知道出了什么问题吗? @RunWith(PowerMockRunner.class) @PrepareForTes
ArgumentCaptor 无法记录时遇到问题多次调用同一个方法时的参数。基本上这似乎不起作用: List mList = mock(List.class); Dummy dummy = new D
考虑一个将接口(interface)实现作为参数的函数,如下所示: interface Callback { fun done() } class SomeClass {
我想验证一个助手类所做的日志记录,该类调用带有一些可变参数的方法。 我正在使用 Mockito (1.10.19) 来模拟实际的记录器,并验证模拟的方法是否按预期调用。 我使用 ArgumentCap
我已经绝望了,我不明白为什么这个测试没有被评估为成功。我已经检查过一百万次了: package someptest; import static org.hamcrest.MatcherAssert.
我有 Somefun(){ mockedService.execute(()->{ //function body }) } 所以我想在模拟中运行execute方法。我怎样才能
我正在测试使用 Architecture Components 中的 Room 库生成的 DAO 类。我想检查连接多个表的查询返回的 LiveData 是否会在数据更改时更新。 我一开始使用 InOr
我有一些通用接口(interface)可以模拟: public interface RequestHandler { public Object handle(Object o); } 并且这个模
问题是我有两个 argumentCaptors,我需要使用 Mockito.when().then() 两次,这个 argumentCaptors.capture() 在when() 中方法的参数。但
Mockito ArgumentCaptor 似乎颠覆了泛型,如以下伪代码所示。 public Class SomeClass{ public void someMethod(Object ms
要检查与方法调用中的参数属于某种类型的模拟的交互次数,可以这样做 mock.someMethod(new FirstClass()); mock.someMethod(new OtherClass()
我是一名优秀的程序员,十分优秀!