一、单元测试时对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.前端常见跨域解决方案(全)
很多时候找问题要去分析根本原因,先把出问题的点定位清楚再想着解决。
测试的时候要多注意边界情况。