2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week 3
本周计划
- 对项目进行完善总结
- 增加对BouncyCastle、Certificate、CertificateFactory的认识
- 尝试使用Junit对部分代码进行单元测试
本周反思
对一些常用的方法的积累不够,查找资料时间耗费过多,说明日常敲的代码不够多,尤其是JAVA这类应用面较广的语言。希望下周能够大量阅读本组其他同学代码,取长补短,优化个人代码并且将测试代码补充完整。
学习记录
代码优化
代码结构
代码细节处理
-
scanner.nextLine(),一次读入一行,方便后续equal判断输入情况
-
String.toLowerCase()方法,将字符串转化为小写,如此可以规避大小写造成的问题
-
String.substring(),可以通过返回子字符串的方式检测后缀名
单元测试
检测异常抛出情况
- Try…catch方法:检测是否抛出异常、检测异常抛出类型
@Test
public void testgetPemWithFileRead() {
String path = "C:\\Users\\Administrator\\ca.cer";
try {
new FileReader(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Test
public void testgetPemWithreadPemObject() {
try {
String path = "C:\\Users\\15205\\Desktop\\KEEP\\certs\\ca.der";
PemReader reader = new PemReader(new FileReader(path));
Object pemObject = reader.readPemObject();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testX509Certificate() {
try {
String path = "C:\\Users\\15205\\Desktop\\KEEP\\certs\\ca.der";
PemReader reader = new PemReader(new FileReader(path));
Object pemObject = reader.readPemObject();
} catch (IOException e) {
e.printStackTrace();
}
}
测试System.exit情况
-
遇到不显示通不通过状况,处于中断状态
-
使用checkPermission方法内部抛出异常解决
public class JudgeCertTest extends TestCase {
@Before
public void setUp() {
final SecurityManager securityManager = new SecurityManager() {
public void checkPermission(Permission permission) {
/**
* 这里permission.getName()会返回exitVM. + status的形式
* 例如System.exit(0) 这里会是exitVM.0
* System.exit(1) 这里会是exitVM.1
* 这里不关系怎么退出的,只需要捕捉到,并不让他退出,继续运行我的测试代码就好了
*/
if (permission.getName().startsWith("exitVM")) {
throw new AccessControlException("");
}
}
};
System.setSecurityManager(securityManager);
}
@Test
public void testReadCertwithexit() {
String certSrc = "pem";
String s = "cer";
if (!s.equals(certSrc)) {
try {
System.exit(0);
}
catch (RuntimeException e) { }
finally {
// 屏蔽好之后,重新设置setSecurityManager为Null,防止junit退出的时候报错
System.setSecurityManager(null);
}
System.out.println("end");
}
}
}