- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Spock 和 Mockito,但我很难弄清楚如何从 Mocks 中获取值(value)。
我正在尝试为名为 UserResource
的 REST 接口(interface)构建 RESTful 服务,该接口(interface)与 EJB3 服务层进行通信。
EJB3 服务将需要由其他开发人员编写的新方法。因此,我想我会创建一个 Mock 来代替 REST 接口(interface)。
这是我的 Spock 测试:
package commonapi.test
import commonapi.command.request.UserCreateRequest
import commonapi.command.resource.UserResource
import commonapi.response.CommandResponse
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import spock.lang.Specification
import static org.mockito.BDDMockito.given
import static org.mockito.Mockito.*
/**
* Specification for Create User Command.
*/
class CreateUserTest extends Specification
{
/**
* Mocked Resource.
*/
@Mock
UserResource mockedUserResource;
def setup()
{
MockitoAnnotations.initMocks(this)
}
def "Mocked Resource Create Single User"()
{
given:
UserCreateRequest createRequest = new UserCreateRequest()
given(mockedUserResource.createUser(createRequest)).willReturn(new CommandResponse())
when:
CommandResponse commandResponse = mockedUserResource.createUser(createRequest)
then:
commandResponse != null
}
}
编译通过,测试运行(通过)
问题是,我觉得我并没有真正“测试”任何东西。据我所知,Mockito Mocks 只是“空对象”,您可以在其中“设置行为”,即给定 x,willReturn y。
但是,如果我要设置行为,我实际上是在为特定的 Spock 特征方法编码它们的行为方式,一旦实现,它可能与真实事物相同,也可能不同。
基本上,我是为了测试目的而构建 Mock 的行为,而不是测试真实的东西。
我认为我在概念上对如何利用 Mocks 正确测试正在开发的系统有点纠结。
如有任何建议或见解,我们将不胜感激。提前致谢!
最佳答案
根据您描述的第一部分,我认为您在 mock 错误的事情。让我重新解释一下您所说的话,以便您了解我是如何理解您的问题的:
在这种情况下,您应该模拟 EJB 代码,而不是 REST 代码。这是纯 java/Mockito 中的示例:
package com.sandbox;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class SandboxTest {
@Test
public void myTest() {
Ejb mock = mock(Ejb.class);
RestApi restApi = new RestApi();
restApi.setEjb(mock);
restApi.doLogic();
verify(mock).logic();
}
private static class Ejb {
public void logic() {
}
}
private static class RestApi {
private Ejb ejb;
private void setEjb(Ejb ejb) {
this.ejb = ejb;
}
public void doLogic() {
ejb.logic();
}
}
}
这里被测系统是RestApi.doLogic
。您的测试应该与此类似。请注意,我没有在测试中直接调用模拟。我通过调用被测系统 (RestApi.doLogic()
) 间接调用它。
这与您的示例不同。您真正要测试的只是您正确设置了模拟。总而言之,您应该模拟被测系统的依赖性,而不是被测系统。
关于mocking - 在 BDD 和 TDD 中利用模拟 (Spock + Mockito),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16655978/
有没有人使用 BDD 来驱动他们的域层? 最佳答案 是的,我们发现这个过程非常有效,并且使用 specflow 来提供这种方法相当容易。我们仅在域层中就实现了 2000 多个场景,我们也使用这种方法来
你需要像Fitnesse这样的东西吗? , 如果您有 BDD测试? 最佳答案 BDD“测试”存在于多个不同的粒度级别,一直到最初的项目愿景。大多数人都知道这些场景。有几个人记得BDD started
对于在休闲游戏开发工作室开始学习和应用 BDD,您有什么建议? 最佳答案 虽然我不能说专门在游戏中使用 BDD,但我不能错过向您介绍这篇优秀文章的机会: http://www.code-magazin
我很喜欢 BDD 的开发方法,但我遇到了对走多远的担忧。这条来自 ThoughtWorks 的最新评论 Radar让我暂停: "The advent of behavior-driven design
我有很多相同的场景,它们只是传递给它们的数据不同。 这是示例: 功能:将报表中的事实链接到 Excel 文档 为了将事实链接到 Excel 文档 作为有权报告的用户 我想点击报告中的事实值 场景:任何
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
似乎互联网没有明确的答案,也没有一套原则来帮助我回答这个问题。所以我求助于 SO 上的伟大人物帮助我找到答案或指导思想:) SpecFlow 对于 .NET 中的 BDD 非常有用。但是当我们谈论 B
我是 BDD 的新人。所以我对场景有一些疑问? BDD 场景和用户场景之间有什么区别?与传统所谓的“用户场景”或“用例”有明显区别吗?你能解释一下吗? 最佳答案 由于您刚才提到的“传统用户场景”有点含
我是 BDD 的新人。所以我对场景有一些疑问? BDD 场景和用户场景之间有什么区别?与传统所谓的“用户场景”或“用例”有明显区别吗?你能解释一下吗? 最佳答案 由于您刚才提到的“传统用户场景”有点含
只是寻找 BDD/SpecFlow 的一些示例 - 理想情况下是一个项目б,这样我就可以了解如何在大型项目中使用 SpecFlow,其中多个功能引用相同的步骤等. 在过去的几个月里,我读了一些博客,但
我们有一个工作流引擎,它会显示可用工作流列表(我指的是工作流定义,而不是实例),用户可以单击任何工作流旁边的“执行”链接来执行该工作流的新实例。我想以 BDD 方式完成这个“执行工作流”故事(功能?)
有谁知道实现这一目标的方法,或者他们认为这是一个好主意。在 Gherkin 中使用 OR 样式语法以减少重复但保持人类可读性(希望如此)。我正在考虑使用多个 OR 语句的每个组合扩展子句组合的情况。例
我有许多 BDD 故事/场景(450+ 以及不断增加),我为现有系统继承了这些故事/场景:more info 。这些故事是使用文件系统文件夹组织的: C:\specifications |
我希望更改 Serenity 报告中的 CSS 和 Logo 。此外,我想在 Serenity 报告中添加一些自定义文本或一些测试的链接。就像生成了一个 excel 报告,我希望在报告的测试步骤中提供
我正在处理几个月前部分完成的代码分支,以及相互交织的依赖关系。因此,前进的最简单方法是将特定分支上的失败测试标记为待处理(rspec 方式)或跳过,并在所有内容合并后处理它们。 在其最终报告中,beh
我是 BDD 新手,使用 SpecFlow 我正在尝试制定一种高效、有组织且可维护的方法(用于 ASP.NET MVC 中)。我需要改进的主要方面是: 步骤分组(到步骤文件中) 重用测试对象(就像通过
我整个星期都在四处寻找,无法全神贯注于如何让我们的 pylons 服务器实例启动以与 Behave BDD 一起使用。你们中的任何人都可以指出我的例子或提供您自己的例子吗?这是我正在处理的内容: 来自
我正在尝试为多步骤业务流程编写需求(通过向导)。我有很多场景,用户与一个屏幕的交互会改变您是否可以在另一个屏幕上选择选项。 例如(我已经模糊了实际业务,但步骤的过程和形式几乎相同): Feature:
有没有人有在 BDD 中使用现成框架作为规范流与 CQRS 的经验。 我喜欢 Mark Nijhof 的方法,但是我已经将 SpecFlow 用于其他项目。任何人都可以提供一些启示,如果可能的话,举个
我们正在尝试为每个步骤截取屏幕截图。 一切正常。但是我们无法将屏幕截图与创建它们的步骤相关联。 我们想要的是类似 FeatureContext.FeatureInfo 的东西和 ScenarioCon
我是一名优秀的程序员,十分优秀!