Unit testing 为JUnit编写参数化测试,为什么我的两个参数;空";当我运行测试时?

Unit testing 为JUnit编写参数化测试,为什么我的两个参数;空";当我运行测试时?,unit-testing,parameters,junit,nullpointerexception,encryption,Unit Testing,Parameters,Junit,Nullpointerexception,Encryption,我在一家webapp安全公司实习,我的任务之一是为文件编写单元测试。我现在处理的文件只是返回一个基于密码的加密。我想要测试该文件的方法是根据相同的密码进行加密和解密。然后,我想对一个字符串进行加密和解密,并将其与原始字符串进行比较。如果两个字符串相等,则测试通过 为此,我创建了一个参数化JUnit测试类,其中包含4个字段:一个用于测试名称,一个用于加密/解密过程中运行的数据,一个用于加密密码,另一个用于解密密码。在将密码传递给@Parameters方法之前,我在setUp方法中初始化密码 然而,

我在一家webapp安全公司实习,我的任务之一是为文件编写单元测试。我现在处理的文件只是返回一个基于密码的加密。我想要测试该文件的方法是根据相同的密码进行加密和解密。然后,我想对一个字符串进行加密和解密,并将其与原始字符串进行比较。如果两个字符串相等,则测试通过

为此,我创建了一个参数化JUnit测试类,其中包含4个字段:一个用于测试名称,一个用于加密/解密过程中运行的数据,一个用于加密密码,另一个用于解密密码。在将密码传递给
@Parameters
方法之前,我在setUp方法中初始化密码

然而,当我运行测试时,我总是遇到
NullPointerException
。在Eclipse中调试视图的帮助下,我确定由于某种原因,虽然所有参数都在
data()
方法中正确设置,但在运行实际的
testMethod()
方法时,我的
\u name
\u data
字段是正确的,但是我的
\u encryptCipher
\u decryptCipher
字段改为
null
。为什么会这样

@RunWith(参数化的.class)
公共类TestClass{
字符串\u名称;
字节[]_数据;
密码-加密密码;
密码-解密密码;
公共测试类(字符串_名称,字节[]_数据,密码_encryptCipher,密码_decryptCipher){
这个。_name=_name;
这是.\u data=\u data;
此.\u encryptCipher=\u encryptCipher;
此.\u decryptCipher=\u decryptCipher;
}
静态密码管理器cm;
静态密码SIMPLEPASS\u ENCRYPT\u密码;
静态密码SIMPLEPASS\u DECRYPT\u密码;
私有静态最终字节[]TEST_SALT=“!th1s_i.s_an 3x4mp+le&s4lt 4_t%35t1ng”。getBytes();
@课前
public static void setUp()引发异常{
cm=CryptoManager.getInstance();
cm.initPsc();
SIMPLEPASS\u ENCRYPT\u CIPHER=CipherUtils.getPBECipher(“abc123.toCharray(),TEST\u SALT,CIPHER.ENCRYPT\u MODE”);
SIMPLEPASS\u DECRYPT\u CIPHER=CipherUtils.getPBECipher(“abc123.tocharray(),TEST\u SALT,CIPHER.DECRYPT\u模式);
}
@参数(name=“{index}:{0}”)
公共静态收集数据(){
返回Arrays.asList(新对象[][]{
{“测试1”,“545671260887”.getBytes(),SIMPLEPASS\u ENCRYPT\u CIPHER,SIMPLEPASS\u DECRYPT\u CIPHER}
});
}
@试验
public void testMethod()引发异常{
assertEquals(_name,_data,_decryptCipher.doFinal(_encryptCipher.doFinal(_data));
}
@下课
public static void tearDown()引发异常{
cm.关机();
}
}
setUp()
之前调用方法
data()
。因此,
SIMPLEPASS\u ENCRYPT\u CIPHER
SIMPLEPASS\u DECRYPT\u CIPHER
为空

您可以直接创建密码:

private static final Cipher SIMPLEPASS_ENCRYPT_CIPHER = CipherUtils.getPBECipher("abc123".toCharArray(), TEST_SALT, Cipher.ENCRYPT_MODE);
或使用
data()
方法:

@Parameters(name = "{index}: {0}")
public static Collection<Object[]> data() {
  SIMPLEPASS_ENCRYPT_CIPHER = CipherUtils.getPBECipher("abc123".toCharArray(), TEST_SALT, Cipher.ENCRYPT_MODE);
  SIMPLEPASS_DECRYPT_CIPHER = CipherUtils.getPBECipher("abc123".toCharArray(), TEST_SALT, Cipher.DECRYPT_MODE);

  return Arrays.asList(new Object[][] {
    {"Test 1", "545671260887".getBytes(), SIMPLEPASS_ENCRYPT_CIPHER, SIMPLEPASS_DECRYPT_CIPHER}
  });
}
@Parameters(name=“{index}:{0}”)
公共静态收集数据(){
SIMPLEPASS\u ENCRYPT\u CIPHER=CipherUtils.getPBECipher(“abc123.toCharray(),TEST\u SALT,CIPHER.ENCRYPT\u MODE”);
SIMPLEPASS\u DECRYPT\u CIPHER=CipherUtils.getPBECipher(“abc123.tocharray(),TEST\u SALT,CIPHER.DECRYPT\u模式);
返回Arrays.asList(新对象[][]{
{“测试1”,“545671260887”.getBytes(),SIMPLEPASS\u ENCRYPT\u CIPHER,SIMPLEPASS\u DECRYPT\u CIPHER}
});
}