1
0
mirror of synced 2026-05-22 14:43:15 +00:00

test: 新增 sa-token-jackson3 单元测试

This commit is contained in:
click33
2026-02-25 19:55:09 +08:00
parent 9c07f7a007
commit f6c5131ad2
9 changed files with 614 additions and 0 deletions
+2
View File
@@ -21,11 +21,13 @@
<!-- 所有子模块 -->
<modules>
<!-- <module>sa-token-core-test</module> -->
<module>sa-token-easy-test</module>
<module>sa-token-springboot-test</module>
<!-- <module>sa-token-springboot-integrate-test</module> -->
<module>sa-token-jwt-test</module>
<module>sa-token-temp-jwt-test</module>
<module>sa-token-json-test</module>
<module>sa-token-jackson3-test</module>
<module>sa-token-serializer-test</module>
</modules>
+38
View File
@@ -0,0 +1,38 @@
<?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-easy-test</name>
<artifactId>sa-token-easy-test</artifactId>
<description>sa-token-easy-test</description>
<dependencies>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jackson3</artifactId>
<version>${revision}</version>
</dependency>
<!-- Jackson 3testJackson3 需要,sa-token-jackson3 中为 optional -->
<dependency>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,99 @@
package com.pj.test;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.exception.NotImplException;
import cn.dev33.satoken.json.SaJsonTemplateDefaultImpl;
import cn.dev33.satoken.json.SaJsonTemplateForJackson3;
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") );
}
// 测试:Jackson3
@Test
public void testJackson3() {
SaManager.setSaJsonTemplate(new SaJsonTemplateForJackson3());
Assertions.assertEquals(SaJsonTemplateForJackson3.class, SaManager.getSaJsonTemplate().getClass());
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
String objectJson = SaManager.getSaJsonTemplate().objectToJson(user);
// 与 json2 不同点:Jackson 3 默认按字母序排列属性
Assertions.assertEquals("{\"@class\":\"com.pj.test.model.SysUser\",\"age\":18,\"id\":10001,\"name\":\"张三\",\"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();
}
// 测试 Map 的转换
private 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 值
private void testNull() {
Assertions.assertNull(SaManager.getSaJsonTemplate().objectToJson(null));
Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null, SysUser.class));
Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null));
Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToMap(null));
}
}
@@ -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 + "]";
// }
//
}
@@ -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 +
'}';
}
}
@@ -0,0 +1,38 @@
<?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-jackson3-test</name>
<artifactId>sa-token-jackson3-test</artifactId>
<description>sa-token-jackson3-test</description>
<dependencies>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-jackson3</artifactId>
<version>${revision}</version>
</dependency>
<!-- Jackson 3testJackson3 需要,sa-token-jackson3 中为 optional -->
<dependency>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,103 @@
package com.pj.test;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.json.SaJsonTemplateForJackson3;
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-jackson3 序列化模块测试
*
* <pre>
* 为什么单独写一个模块来测试 Jackson 3 ?
*
* 在同一个项目里同时引入 jackson 2 和 jackson 3 后,
* 执行:
* SysUser user3 = (SysUser)SaManager.getSaJsonTemplate().jsonToObject(objectJson);
* 会报错:
* java.lang.NoSuchFieldError: POJO
* at tools.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:399)
* at tools.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:361)
* at tools.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:265)
* at tools.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
* at tools.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:158)
* at tools.jackson.databind.DeserializationContext.findNonContextualValueDeserializer(DeserializationContext.java:733)
* at tools.jackson.databind.deser.jdk.UntypedObjectDeserializer._findCustomDeser(UntypedObjectDeserializer.java:179)
* at tools.jackson.databind.deser.jdk.UntypedObjectDeserializer.resolve(UntypedObjectDeserializer.java:152)
*
* 暂未找到解决方案,所以只能单独写一个测试类来测试 Jackson 3 的功能了。
*
* </pre>
* @author click33
*
*/
public class SaJsonTemplateForJackson3Test {
// 开始
@BeforeAll
public static void beforeClass() {
System.out.println("\n\n------------------------ SaJsonTemplateForJackson3 Test star ...");
}
// 结束
@AfterAll
public static void afterClass() {
System.out.println("\n\n------------------------ SaJsonTemplateForJackson3 Test end ... \n");
}
// 测试:Jackson3
@Test
public void testJackson3() {
SaManager.setSaJsonTemplate(new SaJsonTemplateForJackson3());
Assertions.assertEquals(SaJsonTemplateForJackson3.class, SaManager.getSaJsonTemplate().getClass());
// test Object -> Json
SysUser user = new SysUser(10001, "张三", 18);
String objectJson = SaManager.getSaJsonTemplate().objectToJson(user);
// 与 json2 不同点:Jackson 3 默认按字母序排列属性
Assertions.assertEquals("{\"@class\":\"com.pj.test.model.SysUser\",\"age\":18,\"id\":10001,\"name\":\"张三\",\"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();
}
// 测试 Map 的转换
private 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 值
private void testNull() {
Assertions.assertNull(SaManager.getSaJsonTemplate().objectToJson(null));
Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null, SysUser.class));
Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToObject(null));
Assertions.assertNull(SaManager.getSaJsonTemplate().jsonToMap(null));
}
}
@@ -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 + "]";
// }
//
}
@@ -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 +
'}';
}
}