是否可以在单个JUnit单元测试中测试多个异常?例如,我知道可以使用一个例外
@Test(expected=IllegalStateException.class)
Run Code Online (Sandbox Code Playgroud)
现在,如果我想测试另一个异常(例如,NullPointerException),可以在相同的注释,不同的注释中完成吗,还是我需要完全编写另一个单元测试?
这是一个非常复杂的错误,所以请耐心等待.
我在尝试编译一些Java代码时看到了一个奇怪的错误.编译器无法识别静态内部类.让我们说我正在上课MyClass.我需要使用的静态内部类具有FQN x.y.z.Parent.DesiredClass.使用其FQN显式导入此内部类.父级也使用其FQN导入.现在存在另一个包含(另一个,不同的FQN)的包,它有一个类DesiredClass.此其他DesiredClass位于类路径中,但未显式导入.
在继续之前,我应该明确表示无法更改这些类的名称.
现在,当我引用Parent.DesiredClass在我的代码,我使用FQN的Parent.DesiredClass,以避免任何可能的歧义.但是当我编译时,我尝试实例化时遇到错误Parent.DesiredClass.我的代码片段:
x.y.z.Parent.DesiredClass dc;
dc = new x.y.z.Parent.DesiredClass();
Run Code Online (Sandbox Code Playgroud)
这会产生以下编译时错误:
MyClass.java:123: an enclosing instance that contains x.y.z.Parent.DesiredClass is required
dc = new x.y.z.Parent.DesiredClass();
^
Run Code Online (Sandbox Code Playgroud)
值得注意的是,链接的类是使用不同的Java编译器编译的:
MyClass 旨在使用Sun Java 1.4.2_18进行编译x.y.z.Parent.DesiredClass与其他 DesiredClass使用编译微软的Java.遗憾的是,再次使用更现代的Java版本无法重新编译这些类.
此外,当实际尝试使用Sun Java 1.4.2_18进行编译时,编译器中会发生以下异常:
An exception has occurred in the compiler (1.4.2_18). Please file a bug at the Java Developer Connection (http://java.sun.com/cgi-bin/bugreport.cgi) after checking the …Run Code Online (Sandbox Code Playgroud) 我想附加一个Netbeans项目的输出JAR文件名,其中包含一些版本号:类似于1.0,2.0b或甚至是Subversion版本号.不过,我似乎无法找到任何相关信息.我也不确定这是否是构建系统(Ant)的责任,或者IDE(Netbeans)是否可以委派该过程.这样做有一个集中,干净的方式吗?
我首先要描述我遇到的问题,然后给出一些我想要做的背景.最后,我将粘贴一些相关的代码片段.
我正在尝试使用/sf/answers/69468941/中指定的方法实现密钥加密/解密.如果我按原样使用该示例,它可以工作(虽然我确实注意到我需要重新实例化Cipher该类,否则解密会产生垃圾).但是,在我的实现中,我得到以下异常:
java.security.InvalidKeyException: Wrong algorithm: AES or Rijndael required
at com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:77)
at com.sun.crypto.provider.CipherBlockChaining.init(CipherBlockChaining.java:91)
at com.sun.crypto.provider.CipherCore.init(CipherCore.java:469)
at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:217)
at javax.crypto.Cipher.implInit(Cipher.java:790)
at javax.crypto.Cipher.chooseProvider(Cipher.java:848)
at javax.crypto.Cipher.init(Cipher.java:1347)
at javax.crypto.Cipher.init(Cipher.java:1281)
at securitytest.SecurityManager.getCipher(SecurityManager.java:175)
at securitytest.SecurityManager.decryptSecretKey(SecurityManager.java:379)
at securitytest.SecurityManager.<init>(SecurityManager.java:82)
at securitytest.Test.main(Test.java:44)
Run Code Online (Sandbox Code Playgroud)
为了击败这个显而易见的问题,是的,我使用相同的算法:实际上,我分配AES/CBC/PKCS5Padding了一个常量并使用它来实例化Cipher加密和解密的类.我也尝试仅使用AES实例化Cipher进行解密,但这也无效.
我想要做的是使用AES/CBC/PKCS5Padding密码保护密钥.我生成一个随机盐和初始化矢量.在加密密钥后,我将初始化向量(字节数组)附加到加密值(也是一个字节数组,创建一个新数组).然后,我在Base64中对此值进行编码,并将其与salt一起存储在Sqlite数据库中(为简单起见,我将其存储为以逗号分隔的值字符串).但是当我尝试解密时,我得到了上述异常.我可以在调用加密方法之后直接验证,并且直接在解密方法之前验证,以下值完全相同(当转换为Base64时,我可以将其打印出来):
我已经尝试了Java 6和7:两者都给出了相同的结果.我还排除了无限强度管辖权政策文件的问题.事实上,如果我用另一种算法替换"AES"并相应地调整盐的长度(例如"Blowfish",IV长度为8,产生java.security.InvalidKeyException: Wrong algorithm: Blowfish required),我会得到类似的错误.
谷歌无法帮助我解决这个问题.如果有人能够对此有所了解,我将非常感激.
这里有一些代码片段(我的道歉,它有点粗糙):
private static final int INIT_VECTOR_LENGTH = 16;
private static final int PRIVATE_KEY_LENGTH = 128;
private static final int SALT_LENGTH = …Run Code Online (Sandbox Code Playgroud)