《项目架构那点儿事》——快速构建Junit用例

【前 言】按照惯例,在实际项目中我往往会对自己编写的程序进行测试,当测试通过后才能将其用于实战中,当然,编写单元测试是不可避免的,可以直接清晰的检验出 我们程序的可靠性、可只执行性,从中发现问题从而得到及时的解决,这里我就谈谈我们项目里Junit编写规范、模板,其中包括对web层、业务层的分布单 元测试。 【目录】           -----1.Struts2Junit实现Web层单元测试           -----2.SpringJunit实现业务层单元测试 【内容】           一、编写struts2Junit(依赖包:struts2-junit-plugin-2.1.8.jar,junit4,xwork-core- 2.2.1.jar,struts2-core-2.2.3.jar,版本号可以任意struts2版本),我以User为例子,下面是UserWebJunit:

    /**
    * @author fisher
    * @description struts2 单元测试用例模板
    */

    public class Struts2JunitTemplate extends StrutsTestCase {

            /**
             * @description 测试ActionMapping,验证资源是否请求
             */
            @Test
            public void testGetActionMapping() {
                    ActionMapping mapping = getActionMapping("/test/testAction.action");
                    assertNotNull(mapping);
                    assertEquals("/test", mapping.getNamespace());//验证命名空间
                    assertEquals("testAction", mapping.getName());//验证Action名称是否对应
            }

            /**
             * @description 创建Action代理,验证请求参数、页面跳转
             * @throws Exception
             */
            @Test
            public void testGetActionProxy() throws Exception {
                    // 在执行Action方法之前,对request进行请求参数设置
                    request.setParameter("name", "fisher");

                    ActionProxy proxy = getActionProxy("/test/testAction.action");
                    assertNotNull(proxy);
                    proxy.setExecuteResult(false);
                    
                    @SuppressWarnings("rawtypes")
                    UserAction action = (UserAction ) proxy.getAction();//通过ActionProxy获得UserAction实例
                    assertNotNull(action);
                    
                    String result = proxy.execute();//执行execute方法,返回结果
                    assertEquals(Action.SUCCESS, result);//比对返回结果是否和UserAction中的执行结果一致
            }


    }

  二、编写SpringJunit(依赖包:spring-test-3.0.4.RELEASE.jar,junit4,以及其他的spring核心包),还是以User为例子,我们编写UserTestUnit来验证我们后台的方法,如下:

    /**
    * @author fisher
    * @description 用户业务测试
    */
    // 使用springJunit4
    @RunWith(SpringJUnit4ClassRunner.class)
    // spring配置文件加载(locations为文件路径)
    @ContextConfiguration(locations = {
                    "classpath:spring/application-hibernate.xml",
                    "classpath:spring/application-common-service.xml",
                    "classpath:spring/application-sys-service.xml" })
    public class UserTestJunit {
            @Autowired
            UserService userService;// 自动注入userService

            /**
             * @description 测试查询用户
             * @throws Exception
             */
            @Test
            public void query() throws Exception {
                    List result = userService.getAllEmployee();
                    Assert.notEmpty(result);
            }

            /**
             * @description 测试用户添加
             * @throws Exception
             */

            @Test
            public void save() throws Exception {
                    User user = new User();
                    user.setUsrCode("test001");
                    user.setUsrName("test");
                    user.setPassword("123");
                    user.setIdCard("513029198503140026");
                    user.setEmail("aaa@sina.com");
                    User u = userService.save(user);
                    Assert.notNull(u);
                    org.junit.Assert.assertEquals("test", user.getUsrName());
            }

            /**
             * @description 测试用户更新
             * @throws Exception
             */

            @Test
            public void update() throws Exception {
                    User user = new User();
                    user.setUsrCode("test001");
                    user.setUsrName("test");
                    user.setPassword("123");
                    user.setIdCard("513029198503140026");
                    user.setEmail("aaa@sina.com");
                    User u = userService.update(user);
                    Assert.notNull(u);
                    org.junit.Assert.assertEquals("test", user.getUsrName());
            }

            /**
             * @description 测试用户删除
             * @throws Exception
             */

            @Test
            public void del() throws Exception {
                    User user = new User();
                    user.setUserId("1");
                    User u = userService.delete(user);
                    Assert.notNull(u);
                    org.junit.Assert.assertEquals("1", user.getUserId());
            }
    }

【总结】单元测试不仅限于此,灵活性比较大,要结合实际进行编写,上面两种测试是按照我们项目中规范编写,大家可以作为参考,自我觉得还是比较实用而且用注解方式比较方便。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ASP.NETCore

.NET Core中ADO.NET SqlClient的使用与常见问题

  在很多要求性能的项目中,我们都要使用传统的ADO.NET的方式来完成我们日常的工作;目前有一些网友问有关于.NET Core操作SQL Server的问题在...

671
来自专栏技术小讲堂

ASP.NET AJAX(9)__Profile Service什么是ASP.NET Profile如何使用ASP.NET ProfileProfile ServiceProfile Service预

什么是ASP.NET Profile 可以为每个用户(包括匿名用户)储存信息 通过在Web.config中的配置即可在应用程序中使用 强类型的属性 可以定义属性...

3809
来自专栏草根专栏

在asp.net web api 2 (ioc autofac) 使用 Serilog 记录日志

Serilog是.net里面非常不错的记录日志的库,另外一个我认为比较好的Log库是NLog。 在我个人的asp.net web api 2 基础框架(Gith...

3718
来自专栏跟着阿笨一起玩NET

无法将类型“System.Collections.Generic.IEnumerable<EmailSystem.Model.TemplateInfo>”隐式转换为“System.Collection

421
来自专栏颇忒脱的技术博客

Spring、Spring Boot和TestNG测试指南 - @TestPropertySource

@TestPropertySource可以用来覆盖掉来自于系统环境变量、Java系统属性、@PropertySource的属性。

384
来自专栏EAWorld

详解Spring Boot 自动配置机制

一、简介 Spring boot 是一个基于 Spring框架开发,高于 Spring 框架,它对 Spring 做了更好的封装,提供了更多的产品级特性,极大的...

3306
来自专栏史上最简单的Spring Cloud教程

SpringBoot非官方教程 | 第二十五篇:2小时学会springboot

一.什么是spring boot Takes an opinionated view of building production-ready Spring ...

1906
来自专栏菩提树下的杨过

XmlSpy / XSD 以及 验证

很早以前看过一句话:“XML就象空气”,在企业应用开发中XML是一个重要的数据交换标准。而XSD则可以用来校验XML的数据格式是否正确。 一个典型的XSD文件如...

18310
来自专栏NetCore

Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板

Scaffolding Template Intro 我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方...

1736
来自专栏程序员与猫

.NET CORE——Console中使用依赖注入

我们都知道,在 ASP.NET CORE 中通过依赖注入的方式来使用服务十分的简单,而在 Console 中,其实也只是稍微绕了个小弯子而已。不管是内置 DI ...

20610

扫码关注云+社区