Articles of mockito

如何在Android Studio的unit testing中使用Mockito / Hamcrest

我希望能够在Android Studio中进行unit testing和仪器测试,并在其中使用Mockito。 我在Android Studio 0.8中使用新方法进行测试。 这是: 用gradle建设 使用官方Android API进行测试(ActivityInstrumentationTestCase2等) 将测试放在应用程序的目录中,而不是作为单独的模块 在Android Studio中启动测试作为“Android测试”运行配置 如何在我的测试中编写代码,这些代码依赖于仅用于测试的库,例如mockito或hamcrest? 我想在编译和运行测试时包含这些库,但要避免将它们导出到已发布的.apk。 在https://code.google.com/p/mockito/wiki/DeclaringMockitoDependency中,我读过我应该将依赖项添加为: dependencies { …. testCompile “org.mockito:mockito-core:1.9.5” } 但是当我跑步时我得到: 构建脚本错误,找不到支持的Gradle DSL方法:’testCompile()’! 虽然我不确定它是否相关,但我使用的gradle构建文件是: apply plugin: ‘android’ dependencies { compile fileTree(dir: ‘libs’, include: ‘*.jar’) compile project(‘:android-sdk’) testCompile “org.mockito:mockito-core:1.9.5” } android { compileSdkVersion 19 buildToolsVersion “20.0.0” compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets […]

如何使用Mockito和Robolectric嘲笑Context?

这是我的活动片段: public class Search extends Activity { private String TAG = “SEARCH”; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); Log.d(TAG, “About to call initialastion”); // new InitialisationTask(this).execute(); } } 通过上面注释的行,我可以愉快地创建和执行unit testing,如下所示: @RunWith(RobolectricTestRunner.class) public class SearchTest { private Search searchActivity; private Button searchButton; private Button clearButton; private Button loginButton; private Button registerButton; private EditText searchEditText; […]

获取junit.framework.AssertionFailedError:使用Unit和Mockito时,中没有find任何测试

我在我的android项目中添加了以下依赖项: // Unit testing dependencies androidTestCompile ‘junit:junit:4.12’ // Set this dependency if you want to use Mockito androidTestCompile ‘org.mockito:mockito-core:1.10.19’ 并使用junit4 api创建一个测试(例如,Adder是一个简单的类,它总结了int): @RunWith(MockitoJUnitRunner.class) public class AdderTest { @Test public void testValidAdd() { Adder adder = new Adder(); assertEquals(adder.add(1,1), 2); } } 当我尝试运行测试时,我得到: 运行测试测试运行已启动junit.framework.AssertionFailedError:在android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:android.test.AndroidTestRunner.runTest(AndroidTestRunner.run:)上的com.test.myapp.AdderTest中找不到测试。 176)在android.app.Instrumentation的android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)$ InstrumentationThread.run(Instrumentation.java:1701)完成 我在这里和这里读到,但没有任何帮助。 有谁看到我做错了什么/有什么输入?

注入模拟演示者对象的浓咖啡

我想更好地了解用于在android中测试的espresso框架,但是我在尝试模拟我的演示者时遇到了问题。 首先,我在我的应用程序上使用了一些改编的MVP架构,因此,我正在使用诸如View(Activity) – > Presenter – > Model – > Presenter – > View之类的东西来发出请求并更新UI。 我的活动一旦创建就会发出请求以更新所有UI,一旦收到结果,就会相应地更新UI。 public class MyActivity extends AppCompatActivity implements IPresenter{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); new Presenter().doRequestToUpdateUI(); } @Override public void onResponseReceived(UIObject uiOject){ findViewById(R.id.button).setVisibility(uiOject.getVisibility()); } } 但是,此doRequestToUpdateUI()需要一些以前的身份validation,因此需要模拟漏洞呈现器,以便在我的活动上测试其他UI。 有没有办法模拟我的演示者并将其注入活动,或者至少在调用方法doRequestToUpdateUI()时不执行任何操作。 我正在做这样的测试,但直到现在还没有工作。 @LargeTest @RunWith(AndroidJUnit4.class) public class MyActivityInstrumentationTest { @Mock public Presenter presenter; @InjectMocks […]

如何在创建活动之前模拟方法?

我有一个活动 public class MyActivity extends ActionBarActivity { public int i; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); i = getSomeInt(); } protected int getSomeInt() { return 1; // here can be an api-request } } 我想用robolectric 3.0和mockito测试它。 但我需要模拟getSomeInt()方法。 @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class) public class MyActivityTest { private MyActivity mActivity; @Before public void setUp() { […]

Android蓝牙适配器模拟

我正在尝试模拟测试蓝牙应用程序,但我创建一个BluetoothAdapter类的模拟对象的第一步是不工作! 我正在使用powermockito轻松模拟。 mBluetoothAdapter = (BluetoothAdapter)PowerMock.createMock(BluetoothAdapter.class); 这失败了。 使用以下堆栈跟踪 java.lang.IllegalArgumentException: No visible constructors in class android.bluetooth.BluetoothAdapter at org.easymock.internal.DefaultClassInstantiator.getConstructorToUse(DefaultClassInstantiator.java:94) at org.easymock.internal.AndroidClassProxyFactory.createProxy(AndroidClassProxyFactory.java:48) at org.easymock.internal.MocksControl.createMock(MocksControl.java:114) at org.easymock.internal.MocksControl.createMock(MocksControl.java:88) at org.easymock.internal.MocksControl.createMock(MocksControl.java:79) at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212) at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163) at org.powermock.api.easymock.PowerMock.createMock(PowerMock.java:89) at com.xxx.blesimplesample.test.MainActivityTest.setUp(MainActivityTest.java:59) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1710) 任何人都使用任何模拟框架进行蓝牙应用程序模拟? 任何建议都会有所帮助

测试环境配置:Android + JUnit 5 + Mockito + Spek + Kotlin

我很难配置基于JUnit Jupiter(5)的测试环境。 那里有两个不同的错误: WARNING: TestEngine with ID ‘spek’ failed to discover tests org.junit.platform.commons.util.PreconditionViolationException: Could not load class with name… Exception in thread “main” java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)V at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:61)… 配置如下。 主build.gradle : apply plugin: ‘org.junit.platform.gradle.plugin’ buildscript { ext.kotlin_version = ‘1.1.4-3’ repositories { google() jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.0-beta5’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” classpath “org.junit.platform:junit-platform-gradle-plugin:1.0.0” classpath “de.mannodermaus.gradle.plugins:android-junit5:1.0.0” } } […]

如何使用Mockito和dexmaker进行Android测试?

我想让Mockito(1.9.5 rc1)在我的Android测试中工作(使用Robotium)。 为了让它在DVM上运行,我将dexmaker.jar和dexmaker-mockito.jar(v 0.9)放在test-project的类路径中。 在Eclipse中作为Android JUnit测试进行测试后运行: package com.stampay.pos.test; import roboguice.RoboGuice; import android.app.Application; import com.jayway.android.robotium.solo.Solo; import com.stampay.pos.activities.HomeActivity; import com.stampay.pos.model.Consumer; import com.stampay.pos.util.ScannerAndroid; import static org.mockito.Mockito.*; public class HomeActivityTest extends ActivityTest { private Solo solo; Application app; public HomeActivityTest() { super(HomeActivity.class); } @Override public void setUp() throws Exception { solo = new Solo(getInstrumentation(), getActivity()); } @Override public void […]

使用Mockito Matchers.any()和android.support.annotation.IntDef自定义注释

我正在尝试编写一个Junit测试,它将validation是否调用了以下方法: public long executeRequest(@RequestCodes.Code.RequestAnnotation int requestCode, Object requestInformation, RequestListener requestListener) { boolean success = false; … do stuff … return success ? 1L : -1L; } 在测试中使用: Mockito.when(mockedRequest.executeRequest(Matchers.any(RequestCodes.Code.RequestAnnotation.class), Matchers.any(RequestWrapper.class), Matchers.any(RequestListener.class))).thenReturn(1L); RequestCodes.Code.RequestAnnotation类是一个基本的indef接口,使用int来标识使用开关进行的调用。 非常喜欢这个 。 Matchers.any(RequestCodes.Code.RequestAnnotation.class)在这里不起作用,我尝试过Matchers.any() , Matchers.anyInt() , Matchers.isA(RequestCodes.Code.RequestAnnotation.getClass()) (以及正如其他任何想到的那样)没有成功。 任何建议将不胜感激。

如何在android中发布Event Bus发布的unit testing方法?

我在我的应用程序中使用Otto的事件总线。 在我的一个课程中,我发布了这个活动。 MyEvent myevent = new MyEvent(); uiBus.post(myEvent); 我能够测试post方法。 现在有另一个class级正在接收活动。 //ReceiverClass.java @Subscribe public void onEventReceived(MyEvent myevent) { callAMethod(); } 如何进行unit testing以调用此方法。 我尝试使用以下测试代码 @Mock Bus uiBus; @Test public void testBusReceviedEvent() { ReceiverClass instance = new ReceiverClass(); mockBus.register(instance); MyEvent myevent = new MyEvent(); mockBus.post(myEvent); //Test verify(instance, times(1)).callAMethod(); } 但是这段代码不起作用。