2016-08-03 73 views
-1

我只是做單元測試,我叫卡單元測試類的實例越來越空

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()將調用卡類的初始化。那裏的密鑰庫變爲空。我已經初始化了第一個測試用例generateRandom()中的keystore。

每當第一個測試用例(testgenerateRandom())完成時,卡實例就變爲null。使密鑰庫也變爲空

爲什麼卡實例變爲空?那可以幫助我嗎?

+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