2016-08-03 3 views
-1

я просто делаю модульное тестирование для моего класс с именем картыUnit тестирование экземпляр класса становится нулевой

public class Card{ 
private KeyStore kestore; 
private Cipher cipher; 

public Card(){ 
} 

public void generateRandom(){ 
      keyStore = KeyStore.getInstance("AndroidKeyStore"); 

     keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); 

     keyStore.load(null); 
     keyGenerator.init(new 
       KeyGenParameterSpec.Builder(KEY_NAME, 
       KeyProperties.PURPOSE_ENCRYPT | 
         KeyProperties.PURPOSE_DECRYPT) 
       .setBlockModes(KeyProperties.BLOCK_MODE_CBC) 
       .setUserAuthenticationRequired(true) 
       .setEncryptionPaddings(
         KeyProperties.ENCRYPTION_PADDING_PKCS7) 
       .build()); 
     keyGenerator.generateKey(); 
} 

public void init(){ 
     cipher = Cipher.getInstance(
       KeyProperties.KEY_ALGORITHM_AES + "/" 
         + KeyProperties.BLOCK_MODE_CBC + "/" 
         + KeyProperties.ENCRYPTION_PADDING_PKCS7); 

     keyStore.load(null); 
     SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, 
       null); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
} 
} 

и ниже мое кодирование модульного тестирования.

public class cardTest extends AndroidTestCase{ 
    Card card; 

     @Override 
     protected void setUp() throws Exception { 
      super.setUp(); 
      card = new Card(); 
     } 

     @Override 
     protected void tearDown() throws Exception { 
      super.tearDown(); 
     } 

     public class testgenerateRandom(){ 
      card.generateRandom(); 
     } 

     public class testinit(){ 
      card.init(); 
     } 
    } 

поэтому в приведенном выше модульного тестирования,

testinit() будет вызывать инициализации класса карты. там keystore становится null. i уже инициализировал хранилище ключей в generateRandom(), которое является первым тестовым случаем.

всякий раз, когда первый тестовый пример (testgenerateRandom()) выполнен, экземпляр карты становится нулевым. так что хранилище ключей также становится нулевым

Почему экземпляр карты становится нулевым? Может ли кто-нибудь помочь мне в этом?

+0

Пожалуйста, напишите свой реальный код или, по крайней мере, что-то, что на самом деле компилируется. – m0skit0

+0

Обновлено это вы можете увидеть ... @ m0skit0 – Vji

+0

@downvoter Могу ли я получить объяснение для голосования? – Vji

ответ

3

Имейте в виду, что JUnit создаст новый экземпляр вашего cardTest класса для каждого метода испытаний он работает, то есть testgenerateRandom() не будет вызываться до testinit(), как вы, вероятно, ожидать, и оба метода будут использовать различные экземпляры из Card. Не забудьте правильно настроить тестируемый экземпляр в setUp() для каждого метода тестирования.

+0

Можем ли мы ограничить второй вызов метода setup()? – Vji

+2

@Vji Это не так, как работает JUnit. Если вы не хотите, чтобы его вызывали в некоторых тестах, вам нужно включить его только в те тесты, которые вы хотите вызвать. Обратите внимание, что тесты JUnit должны быть полностью независимыми друг от друга. – m0skit0

+0

@Vji, Добро пожаловать! – Egor

Смежные вопросы