public class GrandUtils {
/**
* Return list of existing user's emails
*
* @param c context of the app
* @return list of existing accounts in system or empty list
*/
public static Set<String> getAccountsList(Context c) {
Set<String> accountsList = new HashSet<>();
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
Account[] accounts = AccountManager.get(c).getAccounts();
for (Account account : accounts) {
if (emailPattern.matcher(account.name).matches()) {
accountsList.add(account.name);
}
}
return accountsList;
}
}
@RunWith(MockitoJUnitRunner.class)
@PrepareForTest(GrandUtils.class)
public class CampaingTrackingTest extends ApplicationTestCase<Application> {
public CampaingTrackingTest() {
super(Application.class);
}
@Override
@Before
public void setUp() throws Exception {
super.setUp();
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
createApplication();
}
@MediumTest
public void testMockAccounts() {
HashSet<String> mails = new HashSet<>();
mails.add("one@one.com");
//it needs Context
PowerMockito.when(GrandUtils.getAccountsList(getContext())).thenReturn(mails);
Set<String> givenMails = GrandUtils.getAccountsList(getContext());
assertNotNull(givenMails);
assertEquals(givenMails.size(), 1);
// Next part for comparing data with IntentService and SharedPreferences
}
}
在when()中,您不是在mock上调用method,而是在其他对象上调用method。
我肯定我做错了什么,但什么?
有关静态方法log.d(String tag,String message)
的模拟,请参见此PowerMock示例:
https://github.com/mttkay/droid-fu/blob/master/src/test/java/com/github/droidfu/testbase.java
我认为它为处理静态方法提供了一个很好的例子。
问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。
在尝试模拟InetAddress中的静态方法时,我遇到了奇怪的问题。我成功地能够为许多其他类模拟静态方法,并且一切正常,但InetAddress显示不同的行为。我使用的是JUnit 4. x、Mockito 1.9.5 下面给出了使用Mockito和PowerMock以及InetAddress模拟的测试- 当我将下面给出的方法放入某个实用程序InetAddress中时。getLocalHost()
编辑: 感谢所有的回复。我找到了解决办法。我试图模拟一个方法findById,它不是直接在User.class中,而是在用户扩展的genericModel.class中。现在一切都很完美。
当所有参数都在使用匹配器时,为什么我会得到这个异常?如何解决?我调试了它,发现返回null。 当我将注释添加到测试类并运行测试时,junit不会做出响应。为什么? 编辑 我试着不使用论据匹配器,结果
有没有办法用参数模拟静态方法。 我看到了很多关于这个问题的问题,但是我找不到任何与之相关的问题。