我正在使用 Spock 和 Mockito,并且很难弄清楚如何从 Mocks 中获得价值。
我正在尝试为称为UserResource
与 EJB3 服务层通信的 REST 接口构建 RESTful 服务。
EJB3 服务将需要由其他开发人员编写的新方法。因此,我想我会创建一个 Mock 来代替 REST 接口。
Here is my Spock Test:
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,将返回 y。
但是,如果我正在设置行为,我实质上是在为特定的 Spock 特征方法编写它们应该如何表现的代码,一旦实现,它可能与真实事物相同,也可能不同。
基本上我是为了测试的目的而建立 Mock 的行为,而不是测试真实的东西。
我想我在如何利用 Mocks 正确测试正在开发的系统方面在概念上有点挣扎。
任何建议或见解将不胜感激。先感谢您!