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
}
}