0

私は webapp セキュリティ会社のインターンシップを行っています。私の仕事の 1 つは、ファイルの単体テストを作成することです。私が現在取り組んでいるファイルは、パスワードベースの暗号化暗号を返すだけです。私がファイルをテストしたい方法は、同じパスワードに基づく暗号化と復号化の暗号を作成することです。次に、文字列を暗号化してから復号化し、元の文字列と比較します。2 つの文字列が等しい場合、テストに合格します。

そのために、4 つのフィールドを持つパラメータ化された JUnit テスト クラスを作成しました。 . メソッドに暗号を渡す前に、setUp メソッドで暗号を初期化します@Parameters

ただし、NullPointerExceptionテストを実行すると、常に問題が発生します。Eclipse の [デバッグ] ビューを使用して、何らかの理由で、すべてのパラメーターがメソッドで正しく設定されているにもかかわらず、実際のメソッドdata()を実行するときに、フィールドとフィールドは正しいが、フィールドとフィールドが正しいことを確認しました。代わりです。どうしてこれなの?testMethod()_name_data_encryptCipher_decryptCiphernull

@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();
    }
}
4

1 に答える 1

2

The method data() is called before setUp(). Therefore SIMPLEPASS_ENCRYPT_CIPHER and SIMPLEPASS_DECRYPT_CIPHER are null.

You can create the Ciphers directly:

private static final Cipher SIMPLEPASS_ENCRYPT_CIPHER = CipherUtils.getPBECipher("abc123".toCharArray(), TEST_SALT, Cipher.ENCRYPT_MODE);

or withing the data() method:

@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}
  });
}
于 2013-08-08T22:04:12.237 に答える