- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想测试一个 MVP 模式。所以我有一个 Presenter 类,它会在单击某些按钮时调用 View 方法。现在我想验证 Presenter 是否真的调用了方法,所以我编写了这些测试:
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class MainPresenterTest {
@Mock
private MainContract.View view;
private MainPresenter presenter;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
presenter = new MainPresenter(view);
}
@Test
public void handleScanButtonClicked() {
presenter.handleScanButtonClicked();
verify(view).showScanScreen();
}
@Test
public void handleBackButtonClicked() {
presenter.handleBackButtonClicked();
verify(view).showMainScreen();
}
}
public class MainPresenter implements MainContract.Presenter {
private final MainContract.View view;
public MainPresenter(MainContract.View view) {
this.view = view;
}
@Override
public void handleScanButtonClicked() {
view.showScanScreen();
}
@Override
public void handleBackButtonClicked() {
view.showMainScreen();
}
}
public interface MainContract {
/** handles UI-interaction **/
interface Presenter {
void handleScanButtonClicked();
void handleBackButtonClicked();
}
/** handles showing/hiding UI-elements and screens **/
interface View {
void showScanScreen();
void showMainScreen();
void showWebViewScreen();
}
}
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-all:1.10.19'
Wanted but not invoked:
view.showMainScreen();
-> at com.whatsthat.androidapp.MainPresenterTest.handleBackButtonClicked(MainPresenterTest.java:36)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
view.showMainScreen();
-> at com.whatsthat.androidapp.MainPresenterTest.handleBackButtonClicked(MainPresenterTest.java:36)
Actually, there were zero interactions with this mock.
at com.whatsthat.androidapp.MainPresenterTest.handleBackButtonClicked(MainPresenterTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Wanted but not invoked:
view.showScanScreen();
-> at com.whatsthat.androidapp.MainPresenterTest.handleScanButtonClicked(MainPresenterTest.java:30)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
view.showScanScreen();
-> at com.whatsthat.androidapp.MainPresenterTest.handleScanButtonClicked(MainPresenterTest.java:30)
Actually, there were zero interactions with this mock.
at com.whatsthat.androidapp.MainPresenterTest.handleScanButtonClicked(MainPresenterTest.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Process finished with exit code -1
当我现在在没有运行 AVD 的情况下运行测试时,它们将失败。我只想在我的本地机器上运行这些测试,并且不应该专门与 Android 交互,对吧?但是为了让测试通过,我需要启动一个 AVD,然后构建 + 部署 APK。
这是为什么,我如何才能在我的本地机器上正确运行这些测试?
提前致谢
最佳答案
你没有告诉框架它遇到这一行时应该做什么
view.showScanScreen()
和
view.showMainScreen()
做
doNothing().when(view).showScanScreen();
doNothing().when(view).showMainScreen();
你的测试方法会像这样
@Test
public void handleScanButtonClicked() {
doNothing().when(view).showScanScreen();
presenter.handleScanButtonClicked();
verify(view).showScanScreen();
}
@Test
public void handleBackButtonClicked() {
doNothing().when(view).showMainScreen();
presenter.handleBackButtonClicked();
verify(view).showMainScreen();
}
关于java - Mockito 验证仅在 AVD 运行时通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488161/
我在我的 Ubuntu 中使用 android sdk 已经有一段时间了。最近,我将它升级到 Ubuntu 13.10。从那时起,每当我尝试启动 android 虚拟设备时,我都会收到此错误: Sta
当我转到项目的运行/调试配置时,我不断收到此错误。 如果我单击“确定”,错误会再次出现,并且会不断出现。我无能为力。 最佳答案 尝试以管理员身份运行Android Studio 关于android -
我在 StackOverflow 上搜索了这里,发现许多类似的问题有许多不同的答案,但没有一个对我有用。 因此,在我尝试使用 Google Play API 添加新的虚拟设备之前,我在最后几天很好地使
我在使用运行 4.0.3 操作系统的 HTC One V 开发我的应用程序时遇到了一个非常奇怪的问题。现在,该应用程序在我的和其他一些随机的 2.2、2.3 和 4+ 设备上运行良好,但在某些设备上,
在 AVD 管理器 gui 中,我看到了设备定义列表,这些使得使用给定设置配置设备变得容易。 当我使用 android list targets 时,我从设备定义中得到了一组不同的结果。 是否可以通过
出于某种原因,我无法创建 AVD。我经历了AVD Manager - Cannot Create Android Virtual Device并尝试了解决方案,我还在管理器中调整了不同的设置,包括将名
尝试将名为 AVD 的“2.3”添加到运行配置时出现上述错误。尽管如此,它的创建工作完美无缺。在多个目标上尝试过,见下文: 适用于: L 预览 4.4 不适用于: 2.3.3 4.1.2 4.3 使用
我在 Ubuntu 中使用 Android Studio,它不会创建 AVD。我的 ~/.android/avd 目录中没有创建任何内容。相反,在我的/root 目录中创建了一些东西。我想我不会关心,
我一直在使用 Android 11 AVD 毫无问题地开发和测试我的应用。现在我想测试 Android 12 并使用 Android 12 图像创建一个新的 AVD。但是当我启动 AVD 时,它会生成
无法在模拟器中启动 AVD。输出:sh:1:glxinfo:未找到无法启动'.../sdk/tools/qemu/linux-x86/qem u-system-i386':没有那个文件或目录 最佳答案
我正在运行最新的 beta Android Studio 4.2 Beta 3。每次我尝试单击运行按钮来启动我的 AVD 时,AVD 都不会启动并且会导致 Android Studio 崩溃。我没有安
当尝试使用 Android SDK AVD 管理器创建 AVD 时,出现“错误:空”。这种情况不断发生,因为 SDK 管理器正在寻找“位于\...(错误位置)的现有 Android 虚拟设备列表”。如
自从上次在我的 Mac OSX 上更新 Android Studio (0.8.14) 后,AVD Manager 无法再创建 AVD。 它只是在这个过程中崩溃了。有什么想法吗? 最佳答案 使用命令行
我正在尝试设置 Android 模拟器以使用 Cordova。我安装了我需要的一切,Android SDK 工具 (25.2.5)、Android SDK 构建工具 (25.*) 和 Android
我在 OS X Yosemite 上运行 Android Studio。我试图简单地从 Android Studio AVD Manager 中删除一个 AVD。每次我尝试删除它时,我都会收到消息“选
我正在使用带有 Android 4.4.2 API 级别 19 皮肤 WVGA800 的 Android 模拟器,当我按下 Left Ctrol+F11 时,AVD 配置从 Portait 更改为 L
我需要有关新虚拟设备的 AVD 设置方面的帮助。 我需要与新三星 Galaxy S3 大小相同的 AVD 的设置。 最佳答案 我创建了一个基于 GSM 竞技场状态 (http://www.gsmare
我已经创建了一个 Android 模拟器(Android 虚拟设备),但是我无法找到我在创建此模拟器时构建的 SD 卡。 如何找到 SD 卡及其内容以及如何将 APK 文件安装到 AVD? 最佳答案
将 SDK-Build-Tools 更新到 22.6 和 ADT-Plugin 后,无法通过任何模拟器创建 AVD 或启动任何应用程序这是在更新之前创建的。console 或 log-cat 中没有显
这个错误是我更新IDEA CE到132.1045版本时出现的。AVD 管理器对此 AVD 没有问题。我试图从头开始重新创建 AVD 但没有结果,同样的问题。在 SDK 管理器中没有更新。 如果单击“仍
我是一名优秀的程序员,十分优秀!