单元测试—shiro登录校验+私有方法测试+Object转List,比较List是否完全相等+无限试用Navicat12+其他 = ~-2020/1/16

9 篇文章 0 订阅
6 篇文章 0 订阅

一、单元测试时对shiro用指定用户登录校验

springboot+shiro 。在写单元测试的时候,有些方法里面会调用Subject subject = SecurityUtils.getSubject()
获取当前用户。我这边的做法如下,先登录一个用户,然后在测试的时候获取的就是刚刚指定的用户:

@SpringBootTest
class CommonMethodTest {

    private final DataServiceImpl dataService = new DataServiceImpl();


	//如果不把SecurityManager注入的话,用户就是0。
    @Resource org.apache.shiro.mgt.SecurityManager securityManager;

    @BeforeEach
    public void init() {
        SecurityUtils.setSecurityManager(securityManager);
        login();
    }

    @AfterAll
    static void logout(){
        SecurityUtils.getSubject().logout();
    }

    private void login() {
        final UsernamePasswordToken token =
                new UsernamePasswordToken("666", "666");
        final Subject subject = SecurityUtils.getSubject();
        subject.login(token);
    }

    @Test
    @DisplayName("xx")
    void formDataDetail(){
    	//这样,我获得的account就是666
    	Subject subject = SecurityUtils.getSubject();
        String account = (String) subject.getPrincipal();
    }

参考:shiro实战系列(十三)之单元测试
Junit 对具备shiro登录校验的接口做单元测试
springtest 集成mock实现shiro单元测试认证
spring boot 基于Shiro单元测试
springboot对shiro进行mock单元测试
单元测试shiro的登陆验证功能

二、私有方法单元测试


    private final DataServiceImpl dataService = new DataServiceImpl();

	@Test
	void test(){
		Method method = dataService.getClass().getDeclaredMethod("方法名填这", 参数1的类型.class);
        method.setAccessible(true);
        Object invoke = method.invoke(dataService, 参数1);
        //返回的如果是list可以用下面的方法转一下。
        }

三、Object转List。比较两个List是否相等

    /**
     * 将Object转List
     */
    public static <T> List<T> castList(Object obj, Class<T> clazz) {
        List<T> result = new ArrayList<>();
        if (obj instanceof List<?>) {
            for (Object o : (List<?>) obj) {
                result.add(clazz.cast(o));
            }
            return result;
        }
        return Collections.emptyList();
    }

    /**
     * 比较两个List是否相等
     */
    public static <T extends Comparable<T>> boolean compare(List<T> a, List<T> b) {
        if (a.size() != b.size()) {
            return false;
        }
        for (int i = 0; i < a.size(); i++) {
            if (!a.get(i).equals(b.get(i))) {
                return false;
            }
        }
        return true;
    }

同事用的第一个说很好用,嘿嘿。不过返回Collections.emptyList()可能会有问题。可以改成

public static <T> List<T> castList(Object obj, Class<T> clazz) {
        List<T> result = new ArrayList<>();
        if (obj instanceof List<?>) {
            for (Object o : (List<?>) obj) {
                result.add(clazz.cast(o));
            }
        }
        return result;
    }

四、无限试用Navicat12

破解版Navicat不够安全,容易造成数据泄露等。
但是Navicat又非常好用非常贵。我是利用14天试用的方法来试用:
试用到期后的操作:

  • 关闭Navicat
  • Win + R,输入regedit回车打开注册表编辑器
  • 删除HKEY_CURRENT_USER\Software\PremiumSoft\Data
  • 展开HKEY_CURRENT_USER\Software\Classes\CLSID
  • 展开每一个子文件夹,如果里面只包含一个名为Info的文件夹,就删掉它。

当然我老电脑里面注册表非常多,删了一部分我尝试打开Navicat,结果又可以试用了一个月了(看来懒还多送几天)!
嫌麻烦的同学可以用Dbeaver。虽然没有Navicat好用,但还是有自己的特色。

其他

1.Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
2.测试覆盖率
3.前端常见跨域解决方案(全)

很多时候找问题要去分析根本原因,先把出问题的点定位清楚再想着解决。

测试的时候要多注意边界情况。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值