【发布时间】:2011-05-06 15:22:48
【问题描述】:
鉴于这项服务:
class AchievementsService {
static transactional = true
public void onEvent(String eventName, User user) {
def event = Event.findByName(eventName)
if (!event) {
event = new Event(name: eventName, autoConfigured: true)
event.save()
}
}
}
为什么这个测试失败了:
class AchievementsServiceTests extends GrailsUnitTestCase {
AchievementsService service
User user
protected void setUp() {
super.setUp()
service = new AchievementsService()
user = new User(username:"marty",password: "password")
mockDomain(User,[user])
}
void testThat_given_eventDoesNotExistWhenCallingOnEvent_that_eventIsCreated()
{
mockDomain Event
service.onEvent "MyEvent", user
assert Event.count() == 1
}
}
失败如下:
Assertion failed:
assert Event.count() == 1
| |
0 false
我必须在我的设置中或者在调用我的.save() 方法时遗漏了一个步骤,但我看不到它。
【问题讨论】:
-
您是否收到任何有关事件的验证错误?将此添加到您的服务中进行测试:
if (!event.save()) { event.errors.each{println it} } -
如果您将它作为集成测试运行它是否有效?在将其转换为集成测试后,您可能需要删除对
mockDomain的调用 -
@David - 谢谢,我的模型中缺少约束。将此转换为答案,我会接受。
标签: java unit-testing grails groovy