- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何编写单元测试,因为它包括内部调用其他方法。
public class MyService implements UserDestinationResolver {
@Override
public UserDestinationResult myMethod(Message<?> message){
SimpMessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, SimpMessageHeaderAccessor.class);
****some logics to use access to get the return value UserDestinationResult***
return UserDestinationResult;
这里的getAccessor是MessageHeaderAccessor类的一个静态方法
@Nullable
public static <T extends MessageHeaderAccessor> T getAccessor(Message<?> message, Class<T> requiredType) {
return getAccessor(message.getHeaders(), requiredType);
}
这是我的测试用例:
@RunWith(MockitoJUnitRunner.class)
public class MyServiceTest {
@Mock
private Message<?> message;
private SimpMessageHeaderAccessor accessor;
@Mock
private UserDestinationResult userDestinationResult;
@InjectMocks
private MyService myService;
@Before
public void set_up(){
accessor = SimpMessageHeaderAccessor.wrap(message);
}
@Test
public void resolveDestination(){
when(MessageHeaderAccessor.getAccessor(message,
SimpMessageHeaderAccessor.class)).thenReturn(accessor);
"""""""""""""""""""""""""""""""
assertEquals(excepted, actual);
}
发生错误:
SimpMessageHeaderAccessor cannot be returned by getHeaders() getHeaders() should return MessageHeaders If you're unsure why you're getting above error read on. Due to the nature of the syntax above problem might occur because: 1. This exception might occur in wrongly written multi-threaded tests. Please refer to Mockito FAQ on limitations of concurrency testing. 2. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies - - with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method.
Message是一个接口(interface),我把它当成一个实例mock了,但是它根本获取不到headers,它是一个mock...我该如何解决这个问题..
最佳答案
您不能使用 vanilla mockito 模拟静态方法。
我建议在 MyService 中创建一个 protected 方法来包装静态调用,然后模拟它:
public class MyService implements UserDestinationResolver {
@Override
public UserDestinationResult myMethod(Message<?> message){
SimpMessageHeaderAccessor accessor = getAccessor(message, SimpMessageHeaderAccessor.class);
...
}
protected SimpMessageHeaderAccessor getAccessor(Message<?> message, Class<T> requiredType){
return SimpMessageHeaderAccessor.getAccessor(message, SimpMessageHeaderAccessor.class);
}
然后在测试中:
@RunWith(MockitoJUnitRunner.class)
public class MyServiceTest {
@Mock
private Message<?> message;
@Mock
private UserDestinationResult userDestinationResult;
@InjectMocks
@Spy
private MyService myService;
@Before
public void set_up(){
accessor = SimpMessageHeaderAccessor.wrap(message);
}
@Test
public void resolveDestination(){
// Arrange
doREturn(accessor).when(myService).getAccessor(message,
SimpMessageHeaderAccessor.class));
....
}
这里的变化是您需要监视 MyService 才能模拟 protected 方法。
关于java - Mockito 测试 - SimpMessageHeaderAccessor 不能由 getHeaders() 返回 getHeaders() 应该返回 MessageHeaders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54253405/
如何编写单元测试,因为它包括内部调用其他方法。 public class MyService implements UserDestinationResolver { @Override
嘿伙计们,我在这里建立了一个相当大的网站,我使用了相当多的 php,但我想知道的是,我有一个标题在整个网站上都没有改变,我想知道是否我可以在我的一些 php 代码中创建一个函数,我所要做的就是像函数
如何使用适用于 Android 的 Ion 网络库获取特定 header ? 这就是我正在尝试的: ... .setCallback(new FutureCallback>() { @Over
我正在开发 Web 应用程序,并要求在发布之前对其运行 VAPT。 然后我下载了Vega并快速扫描了我的网络应用程序并发现了 VAPT 问题,如下所示: Vega has detected that
我有一个 servlet。我将此 servlet 作为 http://someDomain/MyServlet/URLPattern 使用。在这个 servlet 的 doGet 方法中,我转发到一个
我的申请链接是https://xxxx.abcd.com 现在,当我在浏览器中点击这个 URL 时,如果我给出字符串中的值,我会得到什么 String host=request.getHeade
我想接受来自客户端的数据。每种方法的优缺点是什么? HttpServletRequest request = retriveRequest(); Cookie [] cookies = request
在我当前的项目中,我有一个与主站点集成的购物车。现在我必须创建一些迷你站点来显示从主站点检索到的数据。当用户点击迷你网站中的立即购买按钮时,它应该重定向到主购物车。但是,当用户单击“继续购物”按钮时,
我们正在开发一个网络应用程序,我正在服务器端实现事件日志记录。我决定一个不错的方法是扩展 Java 日志记录 API 以将事件记录到 CSV 文件中。我创建了一个 java.util.logging.
尽管 headers 属性是公开的。 最佳答案 因为他们是公开的。只需直接通过属性访问它们: $request->headers->get('Content-Type'); 请求头集合是 Symfon
我尝试使用从其关联的 form.Panel 修改的数据来更新 dataview.List 的记录 代码: onListItemTap:function(list,index,target,record
我编写了一个过滤器来向 Response 对象添加一些 header 值。 doFilter 正在设置一些 header 值,如下所示 public void doFilter(final Servl
我需要 request.getHeader(String value) 的 String 参数列表。我已经知道其中一个是“User-Agent”(例如 request.getHeader("User-
我使用的是 Java 6。我对 JSP 和 Servlet 的了解非常少。 我使用以下代码获取运行我的应用程序的浏览器名称: String browserName = requestProvider.
我正在尝试在我的 JUnit 测试中使用 WireMock 来模拟对外部 API 的调用。 public class ExampleWiremockTest { @Rule publi
我有一个从多个域提供的 Tomcat 应用程序。以前的开发人员构建了一个方法来返回应用程序 URL(见下文)。在方法中,他们请求服务器名称 (request.getServerName()),该名称适
目录 1 故事背景 2 源码分析 Step1 javax.servlet.http.HttpServletRequest : reque
1、user agent的含义 user agent中文名为用户代理,简称 ua,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、cpu 类型、浏览器及版本、浏览器渲染引擎、浏
本文整理了Java中org.apache.jackrabbit.webdav.WebdavRequestImpl.getHeader()方法的一些代码示例,展示了WebdavRequestImpl.g
本文整理了Java中org.apache.jackrabbit.webdav.WebdavRequest.getHeader()方法的一些代码示例,展示了WebdavRequest.getHeader
我是一名优秀的程序员,十分优秀!