test: 新增 json 序列化插件的单元测试

This commit is contained in:
click33 2025-03-21 00:47:55 +08:00
parent 9058e7edc4
commit 35cbd38b3b
9 changed files with 399 additions and 1 deletions

View File

@ -15,6 +15,7 @@
*/ */
package cn.dev33.satoken.json; package cn.dev33.satoken.json;
import cn.dev33.satoken.util.SaFoxUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
/** /**
@ -30,6 +31,9 @@ public class SaJsonTemplateForFastjson implements SaJsonTemplate {
*/ */
@Override @Override
public String objectToJson(Object obj) { public String objectToJson(Object obj) {
if(SaFoxUtil.isEmpty(obj)) {
return null;
}
return JSON.toJSONString(obj); return JSON.toJSONString(obj);
} }
@ -38,6 +42,9 @@ public class SaJsonTemplateForFastjson implements SaJsonTemplate {
*/ */
@Override @Override
public<T> T jsonToObject(String jsonStr, Class<T> type) { public<T> T jsonToObject(String jsonStr, Class<T> type) {
if(SaFoxUtil.isEmpty(jsonStr)) {
return null;
}
return JSON.parseObject(jsonStr, type); return JSON.parseObject(jsonStr, type);
} }

View File

@ -16,6 +16,7 @@
package cn.dev33.satoken.json; package cn.dev33.satoken.json;
import cn.dev33.satoken.util.SaFoxUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
/** /**
@ -31,6 +32,9 @@ public class SaJsonTemplateForFastjson2 implements SaJsonTemplate {
*/ */
@Override @Override
public String objectToJson(Object obj) { public String objectToJson(Object obj) {
if(SaFoxUtil.isEmpty(obj)) {
return null;
}
return JSON.toJSONString(obj); return JSON.toJSONString(obj);
} }
@ -39,6 +43,9 @@ public class SaJsonTemplateForFastjson2 implements SaJsonTemplate {
*/ */
@Override @Override
public <T>T jsonToObject(String jsonStr, Class<T> type) { public <T>T jsonToObject(String jsonStr, Class<T> type) {
if(SaFoxUtil.isEmpty(jsonStr)) {
return null;
}
return JSON.parseObject(jsonStr, type); return JSON.parseObject(jsonStr, type);
} }

View File

@ -156,6 +156,9 @@ public class SaJsonTemplateForJackson implements SaJsonTemplate {
*/ */
@Override @Override
public Map<String, Object> jsonToMap(String jsonStr) { public Map<String, Object> jsonToMap(String jsonStr) {
if(SaFoxUtil.isEmpty(jsonStr)) {
return null;
}
try { try {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Map<String, Object> map = mapObjectMapper.readValue(jsonStr, Map.class); Map<String, Object> map = mapObjectMapper.readValue(jsonStr, Map.class);

View File

@ -15,6 +15,7 @@
*/ */
package cn.dev33.satoken.json; package cn.dev33.satoken.json;
import cn.dev33.satoken.util.SaFoxUtil;
import org.noear.snack.ONode; import org.noear.snack.ONode;
/** /**
@ -31,6 +32,9 @@ public class SaJsonTemplateForSnack3 implements SaJsonTemplate {
*/ */
@Override @Override
public String objectToJson(Object obj) { public String objectToJson(Object obj) {
if(SaFoxUtil.isEmpty(obj)) {
return null;
}
return ONode.stringify(obj); return ONode.stringify(obj);
} }
@ -39,6 +43,9 @@ public class SaJsonTemplateForSnack3 implements SaJsonTemplate {
*/ */
@Override @Override
public <T> T jsonToObject(String jsonStr, Class<T> type) { public <T> T jsonToObject(String jsonStr, Class<T> type) {
if(SaFoxUtil.isEmpty(jsonStr)) {
return null;
}
return ONode.deserialize(jsonStr, type); return ONode.deserialize(jsonStr, type);
} }
} }

View File

@ -21,9 +21,10 @@
<!-- 所有子模块 --> <!-- 所有子模块 -->
<modules> <modules>
<!-- <module>sa-token-core-test</module> --> <!-- <module>sa-token-core-test</module> -->
<module>sa-token-springboot-test</module> <module>sa-token-springboot-test</module>
<!-- <module>sa-token-springboot-integrate-test</module> --> <!-- <module>sa-token-springboot-integrate-test</module> -->
<module>sa-token-jwt-test</module> <module>sa-token-jwt-test</module>
<module>sa-token-json-test</module>
</modules> </modules>
<dependencies> <dependencies>

View File

@ -0,0 +1,49 @@
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-test</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<packaging>jar</packaging>
<name>sa-token-json-test</name>
<artifactId>sa-token-json-test</artifactId>
<description>sa-token-json-test</description>
<dependencies>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jackson</artifactId>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-fastjson</artifactId>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-fastjson2</artifactId>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-snack3</artifactId>
</dependency>
<!-- jackson more -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,157 @@
package com.pj.test;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.exception.NotImplException;
import cn.dev33.satoken.json.*;
import com.pj.test.model.SysUser;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
/**
* Sa-Token json 序列化模块测试
*
* @author click33
*
*/
public class SaJsonTemplateTest {
// 开始
@BeforeAll
public static void beforeClass() {
System.out.println("\n\n------------------------ SaJsonTemplateTest star ...");
}
// 结束
@AfterAll
public static void afterClass() {
System.out.println("\n\n------------------------ SaJsonTemplateTest end ... \n");
}
// 测试DefaultImpl
@Test
public void testDefaultImpl() {
SaManager.setSaJsonTemplate(new SaJsonTemplateDefaultImpl());
Assertions.assertEquals(SaManager.getSaJsonTemplate().getClass(), SaJsonTemplateDefaultImpl.class);
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().objectToJson(user) );
Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().jsonToObject("xxx", SysUser.class) );
Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().jsonToObject("xxx") );
Assertions.assertThrows(NotImplException.class, () -> SaManager.getSaJsonTemplate().jsonToMap("xxx") );
}
// 测试Jackson
@Test
public void testJackson() {
SaManager.setSaJsonTemplate(new SaJsonTemplateForJackson());
Assertions.assertEquals(SaManager.getSaJsonTemplate().getClass(), SaJsonTemplateForJackson.class);
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
String objectJson = SaManager.getSaJsonTemplate().objectToJson(user);
Assertions.assertEquals("{\"@class\":\"com.pj.test.model.SysUser\",\"id\":10001,\"name\":\"张三\",\"age\":18,\"role\":null}", objectJson);
// test Json -> Object
SysUser user2 = SaManager.getSaJsonTemplate().jsonToObject(objectJson, SysUser.class);
Assertions.assertEquals(user2.toString(), user.toString());
SysUser user3 = (SysUser)SaManager.getSaJsonTemplate().jsonToObject(objectJson);
Assertions.assertEquals(user3.toString(), user.toString());
// more
testNull();
testMap();
}
// 测试Fastjson
@Test
public void testFastjson() {
SaManager.setSaJsonTemplate(new SaJsonTemplateForFastjson());
Assertions.assertEquals(SaManager.getSaJsonTemplate().getClass(), SaJsonTemplateForFastjson.class);
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
String objectJson = SaManager.getSaJsonTemplate().objectToJson(user);
Assertions.assertEquals("{\"age\":18,\"id\":10001,\"name\":\"张三\"}", objectJson);
// test Json -> Object
SysUser user2 = SaManager.getSaJsonTemplate().jsonToObject(objectJson, SysUser.class);
Assertions.assertEquals(user2.toString(), user.toString());
// more
testNull();
testMap();
}
// 测试Fastjson2
@Test
public void testFastjson2() {
SaManager.setSaJsonTemplate(new SaJsonTemplateForFastjson2());
Assertions.assertEquals(SaManager.getSaJsonTemplate().getClass(), SaJsonTemplateForFastjson2.class);
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
String objectJson = SaManager.getSaJsonTemplate().objectToJson(user);
Assertions.assertEquals("{\"age\":18,\"id\":10001,\"name\":\"张三\"}", objectJson);
// test Json -> Object
SysUser user2 = SaManager.getSaJsonTemplate().jsonToObject(objectJson, SysUser.class);
Assertions.assertEquals(user2.toString(), user.toString());
// more
testNull();
testMap();
}
// 测试Snack3
@Test
public void testSnack3() {
SaManager.setSaJsonTemplate(new SaJsonTemplateForSnack3());
Assertions.assertEquals(SaManager.getSaJsonTemplate().getClass(), SaJsonTemplateForSnack3.class);
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
String objectJson = SaManager.getSaJsonTemplate().objectToJson(user);
Assertions.assertEquals("{\"id\":10001,\"name\":\"张三\",\"age\":18}", objectJson);
// test Json -> Object
SysUser user2 = SaManager.getSaJsonTemplate().jsonToObject(objectJson, SysUser.class);
Assertions.assertEquals(user2.toString(), user.toString());
// more
testNull();
testMap();
}
// 测试 Map 的转换
public void testMap() {
// test Map -> Json
Map<String, Object> map = new HashMap<>();
map.put("id", 10001);
map.put("name", "张三");
map.put("age", 18);
String mapJson = SaManager.getSaJsonTemplate().objectToJson(map);
Assertions.assertEquals("{\"name\":\"张三\",\"id\":10001,\"age\":18}", mapJson);
// test Json -> Map
Map<String, Object> map2 = SaManager.getSaJsonTemplate().jsonToMap(mapJson);
Assertions.assertEquals(map2.toString(), map.toString());
}
// 测试 Null
public void testNull() {
Assertions.assertEquals(null, SaManager.getSaJsonTemplate().objectToJson(null) );
Assertions.assertEquals(null, SaManager.getSaJsonTemplate().jsonToObject(null, SysUser.class) );
Assertions.assertEquals(null, SaManager.getSaJsonTemplate().jsonToObject(null) );
Assertions.assertEquals(null, SaManager.getSaJsonTemplate().jsonToMap(null) );
}
}

View File

@ -0,0 +1,64 @@
package com.pj.test.model;
/**
* Role 实体类
*
* @author click33
* @since 2022-10-15
*/
public class SysRole {
//
// public SysRole() {
// }
//
// public SysRole(long id, String name) {
// super();
// this.id = id;
// this.name = name;
// }
//
//
// /**
// * 角色id
// */
// private long id;
//
// /**
// * 角色名称
// */
// private String name;
//
// /**
// * @return id
// */
// public long getId() {
// return id;
// }
//
// /**
// * @param id 要设置的 id
// */
// public void setId(long id) {
// this.id = id;
// }
//
// /**
// * @return name
// */
// public String getName() {
// return name;
// }
//
// /**
// * @param name 要设置的 name
// */
// public void setName(String name) {
// this.name = name;
// }
//
// @Override
// public String toString() {
// return "SysRole [id=" + id + ", name=" + name + "]";
// }
//
}

View File

@ -0,0 +1,103 @@
package com.pj.test.model;
/**
* User 实体类
*
* @author click33
* @since 2022-10-15
*/
public class SysUser {
public SysUser() {
}
public SysUser(long id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
/**
* 用户id
*/
private long id;
/**
* 用户名称
*/
private String name;
/**
* 用户年龄
*/
private int age;
/**
* 用户角色
*/
private SysRole role;
/**
* @return id
*/
public long getId() {
return id;
}
/**
* @param id 要设置的 id
*/
public void setId(long id) {
this.id = id;
}
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name 要设置的 name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return age
*/
public int getAge() {
return age;
}
/**
* @param age 要设置的 age
*/
public void setAge(int age) {
this.age = age;
}
public SysRole getRole() {
return role;
}
public SysUser setRole(SysRole role) {
this.role = role;
return this;
}
@Override
public String toString() {
return "SysUser{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", role=" + role +
'}';
}
}