当前位置: 代码迷 >> 综合 >> 单元测试—shiro登录校验+私有方法测试+Object转List,比较List是否完全相等+无限试用Navicat12+其他 = ~-2020/1/16
  详细解决方案

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

热度:44   发布时间:2023-11-07 14:45:58.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;@BeforeEachpublic void init() {
    SecurityUtils.setSecurityManager(securityManager);login();}@AfterAllstatic 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就是666Subject 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();@Testvoid 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.前端常见跨域解决方案(全)

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

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

  相关解决方案