Articles of mockito

Mockito中的SecurityProvider与Robolectric一起运行时进行测试

我们还有一个Android项目,我们使用MockitoTestRunner和RobolectricTestRunner进行不同types的测试。 我编写了一组与SSL有关的unit testing,因此加载了certs / keystores / truststores等。为此,我使用了MockitoJUnitRunner并以编程方式添加了Bouncycastle提供程序: Security.insertProviderAt(new BouncyCastleProvider(), 1); 现在,这些测试在自己运行时运行得非常好 – 例如,当我直接从测试类中运行单个方法,或者从Project树菜单中运行这些类时,它们工作得很好。 但是当我在使用RobolectricTestRunner 任何测试中运行所述测试时(例如,如果我在提交之前只在我的项目中运行所有测试),我会得到以下exception: java.io.IOException: error constructing MAC: java.lang.SecurityException: JCE cannot authenticate the provider BC 我很困惑。 一个测试类中使用的testrunner将如何影响其他类的运行,特别是如果我们使用不同的测试运行器? 附加信息: 只有在我实际尝试对BC提供程序执行某些操作时才会出现exception(例如,第一次测试尝试加载PKCS12证书) – insertProviderAt(…)调用本身似乎正常通过… 此外,当我打印出每个测试运行的提供程序列表时,我看到Robolectric已经有一个BC提供程序,但是当我尝试使用它时仍然失败。 此外,如果我不添加BC提供程序,那么在与Robolectric测试一起在测试套件中运行时,测试仍然会失败并出现相同的错误 。 当单独运行时,它们会因java.security.NoSuchProviderException: no such provider: BC而失败java.security.NoSuchProviderException: no such provider: BC ,因为我们明确指定了提供者。

Android:使用Robolectric和Mockito对Android应用程序进行unit testing

我有一个Java库,它使用Android API中的一些东西。 我想用Mockito为这个库编写unit testing。 我有办法解决这个问题吗? Mockito在Dalvik VM上表现不佳,请看这篇文章: 将Mockito与Android虚拟机配合使用 更新: 自从这篇文章发表Robolectric以来,我就有机会在Pivotal Labs工作,并为这个库做出了一些贡献。 我建议在Android测试框架/ mockito上使用它。 此外,您可以自由使用Robolectric和Mockito,但Robolectric中的阴影对象使得大多数用例都不需要Mockito。 尝试对Android进行unit testing的问题在于,您构建的Android库会将所有方法都存根,以便抛出存根exception,或者返回null。 如果你想测试你的应用程序并想要任何Android行为你运气不好,除非你使用Robolectric在类加载时动态重写字节码,并注入一个模拟行为的阴影对象。 更新2: 已经有一段时间了,情况发生了变化。 Robolectric中的许多Shadow类已经被真正的Android类所取代。 现在使用真正的Android jar并且Robolectric仅为更小的一组东西加载Shadow类。 这是使用Robolectric进行Android测试的更多原因。

使用Dagger进行Androidfunction测试

我正试图用Mockito& Dagger来测试一项活动。 我已经能够在我的应用程序中为Activity注入依赖项,但在测试Activity时,我无法向Activity注入mock。 我应该注入Activity来测试还是让getActivity()创建它? public class MainActivityTest extends ActivityInstrumentationTestCase2 { @Inject Engine engineMock; private MainActivity mActivity; private Button mLogoutBtn; public MainActivityTest() { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); // Inject engineMock to test ObjectGraph.create(new TestModule()).inject(this); } @Override protected void tearDown() { if (mActivity != null) mActivity.finish(); } @Module( includes = MainModule.class, […]

Mockito – validation方法有什么作用?

假设我有以下psuedo测试代码: //Let’s import Mockito statically so that the code looks clearer import static org.mockito.Mockito.*; //mock creation List mockedList = mock(List.class); //using mock object mockedList.add(“one”); mockedList.clear(); //what do these two verify methods do ? verify(mockedList).add(“one”); verify(mockedList).clear(); 我一直在显示测试通过,但我不知道validation意味着什么? 什么是确切的validation? 我知道我嘲笑了一个添加和清除的调用但这两个validation调用有什么作用?

如何在Android项目中使用PowerMock?

我创建了一个新的Android测试项目。 我从https://code.google.com/p/powermock/downloads/list下载了powermock-mockito-junit-1-1.5.zip。 我将所有库添加到测试项目的libs文件夹中。 测试类是一个非常简单的对象: package com.test.test; import org.junit.runner.RunWith; import org.powermock.modules.junit4.PowerMockRunner; import android.util.Log; @RunWith(PowerMockRunner.class) public class TestTestAndroid { public void testRuns() { Log.e(“test”, “Test case is called”); } } 然后,我尝试从Eclipse运行项目,或从命令行生成项目。 我犯了同样的错误: Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/hamcrest/Description; 事实certificate, junit-4.8.2.jar和mockito-all-1.9.5.jar定义了org.hamcrest.Description 。 出于显而易见的原因,我必须包括Mockitojar子 – 我需要Mockito。 Android提供了不同版本的JUnit,但它是一个不包含@RunWith注释的旧版本。 有人可以回答如何在Android项目中使用powermock和mockito,而不会出现冲突的org.hamcrest.Description问题吗?

在AndroidTestCase中调用MockitoAnnotations.initMocks()时的NPE

试图在我的AndroidTestCase中使用mockito。 我将依赖项添加到build.gradle: final DEXMAKER_VERSION = ‘1.2’ dependencies { // … androidTestCompile “com.google.dexmaker:dexmaker:${DEXMAKER_VERSION}” androidTestCompile “com.google.dexmaker:dexmaker-mockito:${DEXMAKER_VERSION}” androidTestCompile ‘org.mockito:mockito-core:1.10.19’ } 带有mockito初始化的TestCase: public class UsersListPresenterTest extends AndroidTestCase { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); } public void testInitialize() throws Exception { } } 但是只要我向类中添加任何属性,即使在添加任何注释之前,测试也会开始崩溃: public class UsersListPresenterTest extends AndroidTestCase { String mockString; public void setUp() throws Exception { […]

如何使用Mockito模拟Context?

我正在使用Context来访问WifiManager和BluetoothManager等系统级服务。 如何使用Mockito模拟这个getApplicationContext()?

在我的测试中我需要Robolectric和Mockito,每个人都提出自己的TestRunner

在我的测试中我需要Robolectric和Mockito,每个人都提出自己的TestRunner,我该怎么办? 我有这个代码: @RunWith(MockitoJUnitRunner.class) @EBean public class LoginPresenterTest { @Bean LoginPresenter loginPresenter; @Mock private LoginView loginView; @AfterInject void initLoginPresenter() { loginPresenter.setLoginView(loginView); } @Test public void whenUserNameIsEmptyShowErrorOnLoginClicked() throws Exception { when(loginView.getUserName()).thenReturn(“”); when(loginView.getPassword()).thenReturn(“asdasd”); loginPresenter.onLoginClicked(); verify(loginView).setEmailFieldErrorMessage(); } } 问题是AndroidAnnotations没有注入依赖项,我在尝试使用LoginPresenter时获得了NPE 有人告诉我使用LoginPresenter_构造函数,以便我可以通过这种方式强制注入依赖项: LoginPresenter loginPresenter = LoginPresenter_.getInstance_(context); 为了获得对上下文的访问,我不得不从unit testing切换到Android Instrumentation Tests并执行getInstrumentation().getTargetContext()但我想要unit testing,而不是Instrumentation测试。 所以另一个人告诉我使用Robolectric – 它应该能够为我提供应用程序上下文。 然而,当我看到Robolectric入门页面时,它说 @RunWith(RobolectricGradleTestRunner.class) 这将与我目前的@RunWith注释冲突,所以我该怎么办?

unit testingAndroid应用程序与改造和rxjava

我开发了一个使用rxJava改造的Android应用程序,现在我正在尝试使用Mockito设置unit testing,但我不知道如何模拟api响应以创建不能实现的测试电话但有假响应。 例如,我想测试方法syncGenres是否适用于我的SplashPresenter。 我的课程如下: public class SplashPresenterImpl implements SplashPresenter { private SplashView splashView; public SplashPresenterImpl(SplashView splashView) { this.splashView = splashView; } @Override public void syncGenres() { Api.syncGenres(new Subscriber<List>() { @Override public void onError(Throwable e) { if(splashView != null) { splashView.onError(); } } @Override public void onNext(List genres) { SharedPreferencesUtils.setGenres(genres); if(splashView != null) { splashView.navigateToHome(); } […]

在mockito中创建OkHttpClient时如何解决java.lang.AssertionError?

我正试图让一些jar装网络响应。 我对实际请求有json响应,并且我有Retrofit接口来序列化响应。 试图设置它我感到非常沮丧。 我该怎么办? 看来我的选择是,1)使用MockWebServer()2)使用RequestInterceptor()。 在尝试使用1或2时,我不能为我的生活实例化一个OkHttpClient()而不会失败,基本上这会把我试图立即死亡的每一件事。 我得到一个java.lang.AssertionError,因为当OkHttpClient无法findTLS算法时会抛出它。 if (builder.sslSocketFactory != null || !isTLS) { this.sslSocketFactory = builder.sslSocketFactory; } else { try { SSLContext sslContext = SSLContext.getInstance(“TLS”); sslContext.init(null, null, null); this.sslSocketFactory = sslContext.getSocketFactory(); } catch (GeneralSecurityException e) { **throw new AssertionError(); // The system has no TLS. Just give up.** } } 我试图使用unMock在android.jar中保留“javax.net.ssl”类,但这并没有解决错误。 unMock { // […]