Я занимаюсь интернатурой для компании безопасности webapp, и одна из моих задач - писать модульные тесты для файлов. Файл, над которым я сейчас работаю, просто возвращает шифрованный шифр на основе пароля. Способ, которым я хочу протестировать файл, - это шифрование и расшифровка шифров, основанных на одном и том же пароле. Затем я хочу зашифровать, а затем расшифровать строку и сравнить ее с исходной строкой. Тест проходит, если две строки равны.Написание параметризованных тестов для JUnit, почему два из моих параметров «null» при выполнении моих тестов?
С этой целью я сделал параметризованный тестовый класс JUnit с 4-мя полями: один для имени моего теста, один для данных, которые я запускаю через процессы шифрования/дешифрования, один для шифрования и один для шифрования дешифрования. Я инициализирую свои шифры в моем методе setUp, прежде чем передавать их в мой метод @Parameters
.
Однако, когда я запускаю свои тесты, я продолжаю работать в NullPointerException
. С помощью представления Debug в Eclipse я определил, что по какой-то причине, хотя все параметры заданы правильно в методе data()
, когда пришло время запустить мой фактический метод testMethod()
, поля и _data
верны, но полями _encryptCipher
и _decryptCipher
являются null
. Почему это?
@RunWith(Parameterized.class)
public class TestClass {
String _name;
byte[] _data;
Cipher _encryptCipher;
Cipher _decryptCipher;
public TestClass(String _name, byte[] _data, Cipher _encryptCipher, Cipher _decryptCipher) {
this._name = _name;
this._data = _data;
this._encryptCipher = _encryptCipher;
this._decryptCipher = _decryptCipher;
}
static CryptoManager cm;
static Cipher SIMPLEPASS_ENCRYPT_CIPHER;
static Cipher SIMPLEPASS_DECRYPT_CIPHER;
private static final byte[] TEST_SALT = "!th1s_i.s_an 3x4mp+le &s4lt 4_t%35t1ng".getBytes();
@BeforeClass
public static void setUp() throws Exception {
cm = CryptoManager.getInstance();
cm.initPsc();
SIMPLEPASS_ENCRYPT_CIPHER = CipherUtils.getPBECipher("abc123".toCharArray(), TEST_SALT, Cipher.ENCRYPT_MODE);
SIMPLEPASS_DECRYPT_CIPHER = CipherUtils.getPBECipher("abc123".toCharArray(), TEST_SALT, Cipher.DECRYPT_MODE);
}
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{"Test 1", "545671260887".getBytes(), SIMPLEPASS_ENCRYPT_CIPHER, SIMPLEPASS_DECRYPT_CIPHER}
});
}
@Test
public void testMethod() throws Exception {
assertEquals(_name, _data, _decryptCipher.doFinal(_encryptCipher.doFinal(_data)));
}
@AfterClass
public static void tearDown() throws Exception {
cm.shutdown();
}
}