当前位置: 首页 > 知识库问答 >
问题:

cookie的模拟返回值。使用Mockito获取值()

路伟
2023-03-14

我正在尝试测试另一个方法使用的getCookieByName方法。但是,我不确定我是否正确执行了此操作,因为该方法似乎被多次调用,并且它在第一次尝试时设置了值,但在最后一次调用时为空。我认为模拟调用的顺序可能是错误的,或者其中一些可能不需要,但是如果我删除了其中任何一个,我仍然会得到其他错误,因此不确定我到底做错了什么。

@Service
public class CookieSessionUtils {

private static final String VIADUCT_LOCAL_AMP = "viaductLocalAmp"; // Value to be changed when the test runs to test the "if Y" scenario.


public boolean verifyState(HttpServletRequest request, String state) {

    String viaductLocalAmp = getCookieByName(request, VIADUCT_LOCAL_AMP); 

    if (viaductLocalAmp.equalsIgnoreCase("Y")) {
        return true;
    }

    return false;
}

public String getCookieByName(HttpServletRequest request, String cookieName) {
    try {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(cookieName)) {
                    return cookie.getValue();
                }
            }
        }
    } catch (Exception e) {
        ExceptionLogger.logDetailedError("CookieSessionUtils.getCookieByName", e);
        log.error("Error on Cookie " + e.getMessage());
    }
    return "";
}

这是我的测试和模拟调用,以及在同一个方法中两次调用getCookieByName()。

@Autowired
private CookieSessionUtils cookieSessionUtils;

@Mock
private HttpServletRequest request;

   @Test
public void testVerifyStateWhenCookieNameStartsWithY() {

    Cookie mockCookie = Mockito.mock(Cookie.class);
    when(mockCookie.getName()).thenReturn("viaductLocalAmp");
    when(mockCookie.getValue()).thenReturn("viaductLocalAmp");

    when(request.getCookies()).thenReturn(new Cookie[]{mockCookie});

    when(cookieSessionUtils.getCookieByName(request, "viaductLocalAmp")).thenReturn("Y");

    assertTrue(cookieSessionUtils.verifyState(httpServletRequest, "viaductLocalAmp"));
}

非常感谢。

共有1个答案

广楚
2023-03-14

我在断言下使用了错误的对象。@httpRequest用@MockBean注释,而request使用@Mock,这是我应该在这个场景中使用的。

 类似资料:
  • 让我向您展示getCurrentWeatherWithForecastUsecase类actgually是什么样子: } //这很容易,它只需要一个天气存储库,并要求它获取结果。我把它发送回调用者,调用者将显示它。 更新: 以下是故障的整个堆栈跟踪:

  • 这是我的实际服务方法。在测试时,它给我的变量为空。用户和响应 我试图写一个测试用例和模拟方法findByEmail()和保存(),但同时嘲笑我没有收到用户对象在返回中提到的thenback()和doback()。 有人能帮忙吗。

  • 我有以下几门课 我想为viewModel和UseCase编写一个ermetic测试: 但ViewModel.car似乎总是为空。在测试体中mockapi.fetchcar()检索提供的值,但在FetchCarUseCase中不检索。此外,如果我从界面中移除suspend关键字,那么嘲弄似乎可以很好地工作。 目前,由于一些其他条件,我无法使用Mockk库,所以我只能使用mockito。 我是不是漏掉

  • 问题内容: 我没有运气让Mockito捕获函数参数值!我在模拟搜索引擎索引,而不是建立索引,而是使用哈希。 我不能使用任意参数,因为我正在测试查询的结果(即查询返回的文档)。同样,我也不想为每个文档指定特定的值,也不要为每行指定一行! 我查看了“ 使用Mockito”页面上的“回调”部分。不幸的是,它不是Java,我无法对此做出自己的解释才能在Java中工作。 编辑(为澄清起见):如何获取Mock

  • 问题内容: 我正在使用Mockito 1.9.5。我有以下代码: 我收到一句编译错误: 但是,当我使用模拟方法时,不会出现错误。谁能告诉我怎么回事?使用该方法时为什么会出现错误?当第三方提供且无法修改时,还有其他方法可以解决此问题吗? 问题答案: 编辑 :从Mockito 1.10.x开始,嵌入在类中的泛型类型现在由Mockito用于深层存根。即。 Mockito尽最大努力获取编译器嵌入的类型信息