IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> aviator使用笔记 -> 正文阅读

[开发测试]aviator使用笔记

aviator可解决什么问题

使用表达式代替ifelse实现复杂策略,类似于策略模式

另外判断逻辑可以放到运营后台进行配置

aviator如何使用

核心方法 com.googlecode.aviator.AviatorEvaluator.execute

表达式判断的时候,如果靠左边的条件可以拿到判定结果,右边就不用判断了,如果后面是方法的话,就不会调用了,减少了不必要的方法调用

package com.demo.aviator;

import com.google.common.collect.ImmutableMap;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.runtime.function.AbstractVariadicFunction;
import com.googlecode.aviator.runtime.type.AviatorLong;
import com.googlecode.aviator.runtime.type.AviatorObject;
import com.googlecode.aviator.runtime.type.AviatorType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

@Slf4j
public class AviatorEvaluatorTest {

    // 简单的例子
    @Test
    public void executeSimple() throws Exception {
    		// 表达式expression判断参数env的属性age是否大于1,结果为true
        final String expression = "age > 1";
        final ImmutableMap<String, Object> env = ImmutableMap.of("age", 10);
        final Object result = AviatorEvaluator.execute(expression, env);
        System.out.println(result);
    }

    // 自定义的复杂场景
    @Test
    public void execute() throws Exception {
        // 构建参数
        final Foo foo = Foo.builder().age(18).richer(true).orderNo("Od0001").productNo("prd01001").gender(0).build();

        // 将参数放到map中
        Map<String, Object> param = new HashMap<>();
        param.put("p", foo);

        // 增加自定义方法
        AviatorEvaluator.addFunction(new MyAviatorFunction());

        // 表达式,除了判断参数中的属性,还会调用方法进行判断
        final String expression = "p.age > 16 && p.richer && p.gender == 0 && myFun() == 1 && myFun(p) == 1";
        final Object result = AviatorEvaluator.execute(expression, param);
        // 输出判断结果
        System.out.printf("result=%s expression=%s param=%s %n", result, expression, param);
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    // 自定义入参
    public static class Foo {
        private String productNo;
        private String orderNo;
        private int gender;
        private boolean richer;
        private int age;
    }

    // 自定义获取数据的方法
    static class MyAviatorFunction extends AbstractVariadicFunction {

        // 自定义方法名称
        @Override
        public String getName() {
            return "myFun";
        }

        @Override
        public AviatorObject call(Map<String, Object> env) {
            log.info("------- {}", env);
            return new AviatorLong(1);
        }

        @Override
        public AviatorObject variadicCall(Map<String, Object> env, AviatorObject... args) {
            final AviatorObject arg1 = args[0];
            final Foo foo = (Foo) arg1.getValue(env);
            log.info("------- env={} foo={}", env, foo);
            final AviatorType type = arg1.getAviatorType();
            return new AviatorLong(1);
        }
    }
}

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:47:46  更:2022-04-09 18:49:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:35:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码