我正在使用两个应用程序进行项目:android app(客户端)和rest服务(server).我的Android应用程序消耗我的休息服务.
这两个应用程序都是单独测试的,以确保它们按预期开展业务.在服务器测试期间,我准备请求并检查服务器响应 在客户端测试期间,我设置了一个简单的http模拟服务器,并针对不同的模拟响应测试客户端的请求.
现在,这种技术非常有效.它给了我一种我喜欢的灵活性.我可以使用不同的测试框架和持续集成环境.但有一个弱点.在(客户端和服务器)测试用例中,我指定了相同的api.我假设,例如
GET /foo-list.json
Run Code Online (Sandbox Code Playgroud)
将使用json返回HTTP 200
[{
id: 1,
name: foo1,
}, {
id: 2,
name: foo2
}]
Run Code Online (Sandbox Code Playgroud)
所以我重复一遍.如果我更改响应格式,我的客户端测试不会失败.
我的问题是关于测试这种情况的良好做法.如何在不牺牲独立测试灵活性的情况下进行真正的集成测试.我应该使用模拟服务器或我的休息服务的真实实例来测试客户端吗?
请分享您的专业经验.
这是grails应用程序中的一个简单域类:
class User {
String username
static constraints = {
username unique: true
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该编写单元测试来检查用户名字段是否唯一?
@Test
void cannotCreateMoreThanOneUserWithTheSameUsername() {
new User(username: 'john').save()
def secondUser = new User(username: 'john')
assert !secondUser.validate()
}
Run Code Online (Sandbox Code Playgroud)
我有点怀疑,因为:
如果我按照TDD原则编写User类,那么我应该在实现约束闭包之前编写失败的测试.
另一方面,在域中设置唯一约束是数据模型配置而不是真实逻辑.而且,保存和验证方法在框架中实现.