2013-09-21 23 views
1

我有一個Android活動,我想寫一個單元測試,它驗證在onResume該活動檢查互聯網是否可用。如何在Android中測試靜態方法invokation?

public class MyActivity { 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     setContentView(R.layout.connect_to_server); 

     // Internet availability check 

     final IInternetAvailabilityChecker checker = InternetAvailabilityChecker.create(this); 

     if (!checker.isInternetAvailable()) 
     { 
      Utils.showMessageBox(this, R.string.app_name, 
        R.string.internet_not_available); 
      return; 
     } 

在測試中,我想驗證MyActiviy.onResume調用InternetAvailabilityChecker.create方法。

我該怎麼做(與任何免費的嘲笑框架兼容Android)?

我試圖使用PowerMock(見下面的示例),但是當我嘗試運行測試時,出現如下錯誤:MockTest.java:7:package org.powermock.core.classloader.annotations不存在

Maven的:

<properties> 
    <powermock.version>1.5.1</powermock.version> 
</properties> 
<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-module-junit4</artifactId> 
    <version>${powermock.version}</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-api-mockito</artifactId> 
    <version>${powermock.version}</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.10</version> 
</dependency> 

單元測試:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ InternetAvailabilityChecker.class }) 
public class MyActivityPowerMockTest { 
    @Test 
    @Ignore 
    public void test() 
    { 
     final IInternetAvailabilityChecker checker = mock(IInternetAvailabilityChecker.class); 

     when(checker.isInternetAvailable()).thenReturn(false); 

     mockStatic(InternetAvailabilityChecker.class); 
     expect(InternetAvailabilityChecker.create(any(Activity.class))).andReturn(checker); 
     replay(InternetAvailabilityChecker.class); 

     final MyActivity objectUnderTest = new MyActivity(); 

     objectUnderTest.onResume(); 

     // Verify that the method InternetAvailabilityChecker.create was called 
     verify(InternetAvailabilityChecker.class); 

     // TODO: Verify that Utils.showMessageBox has been invoked 
    } 
} 

回答

0

你似乎缺少一個Maven依賴。

  • org.powermock/powermock核
  • org.powermock/powermock-EasyMock的單罐離型全
  • org.powermock/powermock-的Mockito:根據this query註釋是由供給-single-jar-release-full