有谁可以告诉我为什么这个测试失败和/或如何让测试运行?
测试正确运行,直到最后一次断言。
@RunWith(MockitoJUnitRunner.class)
public class AccountHelpTest {
@Mock
AccountManager accountManager;
public class AccountHelp {
public AccountManager accountManager;
public Account[] getAccounts(String type) {
return accountManager.getAccountsByType(type);
}
}
@Test
public void account() {
AccountHelp ah = new AccountHelp();
ah.accountManager = accountManager;
when(accountManager.getAccountsByType(anyString())).thenReturn(new Account[]{new Account("name", "type")});
Account[] types = ah.getAccounts("type");
Assert.assertNotNull(types);
Assert.assertEquals(1, types.length);
Assert.assertEquals("name", types[0].name);
}
}
我可以将其分解为这个问题:
Account account = new Account("name", "test");
Assert.assertEquals("name", account.name);
这是失败的! (它是一个JUnit4测试,而不是一个instrumentationTest)
答案 0 :(得分:0)
它将Android Studio provides a special android.jar用于测试,这使Mockito能够正常工作。 这个jar中的所有类都是某种虚拟类,这就是测试失败的原因。
作为一种解决方案(取决于您要测试的内容),您可以创建自己想要使用的类的实现。在我的课堂上,它会是这样的:
package android.accounts;
public class Account {
public final String type;
public final String name;
public Account(String name, String type) {
this.name = name;
this.type = type;
}
}
创建并再次执行测试后,测试成功。
答案 1 :(得分:0)
正如Unicate所说,Android Studio提供了一个android.jar,其中所有方法都是存根。 Robolectric通过生成替代Android内置ins的工作模拟类来解决这个问题。他们将ShadowAccountManager
替换为AccountManager
。
就个人而言,我发现新版本的文档令人沮丧,但也许你会比我更好运。