- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我正在尝试在我的数据库中模拟插入并运行它进行测试。测试失败并出现错误“when() 需要一个必须是‘模拟方法调用’的参数”。我是新手,需要一些帮助。
我没有使用任何框架
编辑测试代码
保存Servlet.java
package com.consentServlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/SaveServlet")
public class SaveServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
//Getting the attributes from the UI
String first_Name = request.getParameter("fname");
String last_Name = request.getParameter("lname");
String gender = request.getParameter("gender");
String age = request.getParameter("age");
String dob = request.getParameter("dob");
//Setting the objects to insert the achieved attributes to corresponding the columns of the table
patient addPatient = new patient();
addPatient.setLastName(last_Name);
addPatient.setFirstName(first_Name);
addPatient.setGender(gender);
addPatient.setAge(age);
addPatient.setDoB(dob);
out.print(" <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css\">");
//calling the save function from the patientDao class to execute the query
int status=patientDao.save(addPatient);
if(status>0){
out.print("<p>Patient Record saved successfully!</p>");
request.getRequestDispatcher("index.html").include(request, response);
}else{
out.println("Sorry! unable to save record");
}
out.close();
}
}
患者.java
package com.consentServlets;
import java.util.List;
//creating objects for patient class which will help to store the patient details
public class patient {
private int id;
private String first_Name,last_Name,gender,age,dob;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return first_Name;
}
public void setFirstName(String first_Name) {
this.first_Name = first_Name;
}
public String getLastName() {
return last_Name;
}
public void setLastName(String last_Name) {
this.last_Name = last_Name;
}
public String getGender() {
return gender;
}
public void setGender(String Gender) {
this.gender = Gender;
}
public String getAge() {
return age;
}
public void setAge(String Age) {
this.age = Age;
}
public String getDoB() {
return dob;
}
public void setDoB(String DOB) {
this.dob = DOB;
}
}
patientDao.java
package com.consentServlets;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class patientDao {
//establishing the connection with the database
public Connection getConnection(){
Connection con=null;
try{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/consent_share","root","");
}catch(Exception e){System.out.println(e);}
return con;
}
public static int save(patient addPatient){
int status = 0;
//Inserting patient details from UI to Database
try{
Connection con = new patientDao().getConnection();
PreparedStatement ps = con.prepareStatement(
"insert into patient(last_name,first_name,gender,age,dob) values (?,?,?,?,?)");
ps.setString(1,addPatient.getLastName());
ps.setString(2,addPatient.getFirstName());
ps.setString(3,addPatient.getGender());
ps.setString(4,addPatient.getAge());
ps.setString(5,addPatient.getDoB());
status = ps.executeUpdate();
con.close();
}catch(Exception ex){ex.printStackTrace();}
return status;
}
public static patient getPatientbyId(int id){
patient getPatient = new patient();
//selecting a patient record by matching the patient_ID
try{
Connection con = new patientDao().getConnection();
PreparedStatement ps = con.prepareStatement("select * from patient where patient_id=?");
ps.setInt(1,id);
ResultSet rs = ps.executeQuery();
if(rs.next()){
getPatient.setId(rs.getInt(1));
getPatient.setLastName(rs.getString(2));
getPatient.setFirstName(rs.getString(3));
getPatient.setGender(rs.getString(4));
getPatient.setAge(rs.getString(5));
getPatient.setDoB(rs.getString(6));
}
con.close();
}catch(Exception ex){ex.printStackTrace();}
return getPatient;
}
// Fetching all the records from table
public static List<patient> getAllPatients(){
List<patient> list = new ArrayList<patient>();
try{
Connection con = new patientDao().getConnection();
PreparedStatement ps = con.prepareStatement("select * from patient");
ResultSet rs = ps.executeQuery();
while(rs.next()){
patient getAllPatients=new patient();
getAllPatients.setId(rs.getInt(1));
getAllPatients.setFirstName(rs.getString(3));
getAllPatients.setLastName(rs.getString(2));
getAllPatients.setGender(rs.getString(4));
getAllPatients.setAge(rs.getString(5));
getAllPatients.setDoB(rs.getString(6));
list.add(getAllPatients);
}
con.close();
}catch(Exception e){e.printStackTrace();}
return list;
}
}
patientTest.java
package com.test;
import static org.junit.Assert.assertEquals;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import com.consentServlets.patient;
import com.consentServlets.patientDao;
@RunWith(MockitoJUnitRunner.class)
public class patientTest{
@Mock
Connection mockCom;
@Mock
PreparedStatement mockSt;
@InjectMocks
patientDao mockPatDao;
@Test
public void testPatientServlet() throws Exception {
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
/*
* Mockito.when(request.getParameter("fname")).thenReturn("Rahul");
* Mockito.when(request.getParameter("lname")).thenReturn("Sen");
* Mockito.when(request.getParameter("gender")).thenReturn("Male");
* Mockito.when(request.getParameter("age")).thenReturn("20");
* Mockito.when(request.getParameter("dob")).thenReturn("1996-07-24");
*/
patient patientSave = new patient();
patientSave.setLastName("Rahul");
patientSave.setFirstName("Sen");
patientSave.setGender("Male");
patientSave.setAge("20");
patientSave.setDoB("1996-07-24");
//String query = "";
Mockito.when(new patientDao().getConnection()).thenReturn(mockCom);
Mockito.when(mockCom.prepareStatement(Matchers.anyString())).thenReturn(mockSt);
Mockito.when(mockSt.executeUpdate()).thenReturn(1);
String URI = "/SaveServlet";
//int status=patientDao.save(patientSave);
int actualStatus= mockPatDao.save(patientSave);
int expectedStatus = 1;
//Mockito.when(insert.save(patientSave)).thenReturn(1);
assertEquals(expectedStatus,actualStatus);
}
}
堆栈跟踪
org.mockito.exceptions.misusing.MissingMethodInvocationException:
when() 需要一个参数,该参数必须是“对模拟的方法调用”。例如: 当(mock.getArticles()).thenReturn(文章);
此外,此错误可能会出现,因为:1. 你 stub :final/private/equals()/hashCode() 方法之一。 这些方法不能被 stub /验证。 不支持在非公共(public)父类上声明的模拟方法。2. 在 when() 中,你不是在 mock 上调用方法,而是在其他一些对象上调用方法。
at com.test.patientTest.testPatientServlet(patientTest.java:62)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.mockito.internal.runners.DefaultInternalRunner$1$1.evaluate(DefaultInternalRunner.java:46)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:77)
at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:83)
at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39)
at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
最佳答案
在异常消息中它说:
inside when() you don't call method on mock but on some other object.
在你的代码中你有:
patientDao insert = new patientDao();
...
Mockito.when(insert.save(patientSave)).thenReturn(status);
我不太确定你想用第二行实现什么,但它会导致错误并且没有用 - 你应该删除它。
其实整个测试我都不清楚。
如果我理解正确的话,insert
是被测试的对象,所以没有必要模拟它,你必须在一个实际的对象上工作。
关于java - 测试失败并显示 "when() requires an argument which has to be ' 对 mock 的方法调用“maven 项目错误(未使用框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59929225/
使用 ABC 加载模块 ( require )在分发的一个模块中工作,而在分发的另一个模块中失败。 加载 ABC 的原因可能是什么?与 require在一个地方失败? require Name::AB
我定义了以下方法: void Write(string fileContent, string fileName, string container = StorageBlobContainers.P
现在,Require.js是我最喜欢的Javascript编程方式。它可以使代码化整为零,并易于管理。而Require.js Optimizer能帮助我们将一个较大的应用分散成多个较小的应用,并通过
尝试开始使用 apioto http://apiato.io/A.getting-started/installation/ 如果我尝试测试 http://api.apiato.dev/registe
浏览 MDN 文档以查看提议的伪类的状态时,我遇到了 :required(并且扩展为 :optional)。这两个都已经存在很长时间了,但我现在才刚刚了解到。 此选择器与使用属性选择器 [requir
我正在尝试实现此条件:如果存在特定属性,则需要另一个属性;但如果它不存在,则不需要另一个。 另外,在 JSON 模式中,我们可以在依赖项中使用 not 吗? 这是一个示例架构 var schema =
我正在使用react-hot-loader我对其示例代码感到非常困惑: import React from 'react' import ReactDOM from 'react-dom' impor
过去几天我一直在玩 requirejs。我试图理解定义和要求之间的区别。 Define 似乎允许模块分离并允许遵守依赖关系顺序。但它会下载开始时所需的所有文件。而 require 仅在您需要时加载您需
我的项目是使用 angular cli [版本 - 6.1.3] 创建的。 我安装了 npm 模块 - is-reachable并在我的代码中使用它作为 - const isReachable = r
(有人可能会相应地更改标题)当像这样调用 javascript 的 require 方法时到底发生了什么: var xyz = require('xy')(require('z')); 谢谢 最佳答案
我一直在使用编译为 Node 代码的 Typescript 开发应用程序。因此,我更喜欢使用 import 语句来 require。 我一直在尝试将 Lodash 与 Lodash-Deep 一起使用
我在 require 中有一个奇怪的行为,我不知道如何避免(或者也许我的基础知识错误?)。 考虑以下代码: define (require) -> potoo = require "potoo"
这两种加杏仁和不加杏仁有什么区别? require('模块');require(['模块']); 编辑 嵌套: define(function() { require('module'); } def
我愿意使用 require.js 优化器优化我的 javascript 应用程序,但我现在想知道是否也可以在一个文件中包含 require.config 路径和 javascript 模块。事实上,在
我想我需要在一个页面中支持多个 require 实例,但在实现它时遇到了两个问题。我正在开发一项服务,该服务向外部客户端页面提供可嵌入的交互式对象。最重要的设计标准是易于嵌入,尽可能少地假设客户端环境
required 和 ng-required(表单验证)之间有什么区别? 最佳答案 AngularJS 表单元素查找 required属性来执行验证功能。 ng-required允许您设置requir
我有以下多选框: 0" /> 在我的 Controller 中,我在初始化时执行此操作: $scope.form.Slides = []; 如果幻灯片数组中有幻灯片,我希望表单的此元素有效。这些是动
我在 ubuntu 上运行 VPS: Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 C
我正在使用 ArcGIS API for Javascript 3.21。我在 require() 中有一个函数。我希望在单击按钮时调用该函数,但该按钮位于 require() 之外。
我的浏览器应用程序使用 require.js。该应用程序在屏幕上显示许多不同的小部件之一。 URL 片段包含小部件的路径(require.js 路径),然后调用 require 来动态加载它: var
我是一名优秀的程序员,十分优秀!