test: 新增 sa-token-jackson3 单元测试
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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 3(testJackson3 需要,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 3(testJackson3 需要,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>
|
||||
+103
@@ -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 +
|
||||
'}';
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user