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

HttpSession Junit测试

郎翔
2023-03-14

我不能在HttpSession上进行模拟。测试方法如下所示:

@GetMapping
    @RequestMapping("/feed")
    public String feed(HttpSession session, Model model) throws UnauthorizedException {
        if (session.getAttribute("loginStatus") == null) throw new UnauthorizedException("You have to login first");
        Long userId = (Long) session.getAttribute("userId");
        model.addAttribute("posts", postService.feed(userId));
        return "posts/feed";
    }

测试结果如下所示:

 @Mock
    private PostService postService;

    private MockMvc mockMvc;

    private PostViewController controller;

    @Mock
    private HttpSession session;


    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        controller = new PostViewController(postService);
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }

    @Test
    public void feed() throws Exception {
        when(session.getAttribute("loginStatus")).thenReturn(true);

        mockMvc.perform(get("/feed"))
                .andExpect(status().isOk())
                .andExpect(view().name("posts/feed"))
                .andExpect(model().attributeExists("posts"));
    }

我总是得到未经授权的例外,但我需要避免它。如何为会话添加一些参数来模拟工作?

共有1个答案

巫马修然
2023-03-14

在配置MockHttpServlet期间,您应该使用相关的会话方法来配置会话状态。在内部,它将为您正在构建MockHttpServlet创建一个MockHttpSession

 mockMvc.perform(get("/feed")
           .sessionAttr("loginStatus", true)
           .sessionAttr("userId", 1234l))
                .andExpect(status().isOk())
                .andExpect(view().name("posts/feed"))
                .andExpect(model().attributeExists("posts"));
 类似资料:
  • 22.13.5.测试检测 测试任务检测哪些类是通过检查编译测试类的测试类。默认情况下它会扫描所有.calss文件.可以自定义包含/排除哪些类需不要要被扫描.所使用不同的测试框架(JUnit/ TestNG)时测试类检测使用不同的标准。 当使用JUnit,我们扫描的JUnit3和JUnit4的测试类。如果任一下列条件匹配,类被认为是一个JUnit测试类: 类或父类集成自TestCase或Groovy

  • 单元测试是用来校验程序的正确性的,然而,程序能正常运行后,往往还需要测试程序(一部分)的执行速度,这时,f就需要用到性能测试。 通常来讲,所谓性能测试,指的是测量程序运行的速度,即运行一次要多少时间(通常是执行多次求平均值)。Rust 竟然连这个特性都集成在语言基础特性中,真的是一门很重视工程性的语言。 下面直接说明如何使用。 cargo new benchit cd benchit 编辑 src

  • 程序测试是一种找到缺陷的有效方式,但是它对证明没有缺陷却无能为力。 Edsger W. Dijkstra, “The Humble Programmer” (1972) 作为软件工程质量保障体系的重要一环,测试是应该引起我们充分注意并重视的事情。前面说过,Rust 语言的设计集成了最近十多年中总结出来的大量最佳工程实践,而对测试的原生集成也正体现了这一点。下面来看 Rust 是怎么设计测试特性的。

  • 本章讲解 Rust 中内建的测试与评测相关知识。 测试 (testing) 评测 (benchmark)

  • import counter from './counter'; describe('counter reducers', () => { it('should handle initial state', () => {

  • 下面的示例会为您测试Redux应用程序打下坚实的基础。

  • 就像 会编译代码并运行生成的二进制文件一样,cargo test 在测试模式下编译代码并运行生成的测试二进制文件。可以指定命令行参数来改变 cargo test 的默认行为。例如,cargo test 生成的二进制文件的默认行为是并行的运行所有测试,并捕获测试运行过程中产生的输出避免他们被显示出来,使得阅读测试结果相关的内容变得更容易。 这些选项的一部分可以传递给 cargo test,而另一些则

  • 测试用来验证非测试的代码是否按照期望的方式运行的 Rust 函数。测试函数体通常执行如下三种操作: 设置任何所需的数据或状态 运行需要测试的代码 断言其结果是我们所期望的 让我们看看 Rust 提供的专门用来编写测试的功能:test 属性、一些宏和 should_panic 属性。 作为最简单例子,Rust 中的测试就是一个带有 test 属性注解的函数。属性(attribute)是关于 Rust