我不知道是否要在我的Grails 2.2.3应用程序中使用单元测试或集成测试。我想像这样进行一些测试:
@TestFor(Student)
@Mock(Student)
class StudentTests {
void testFoundStudent() {
def s = Student.findById(myId)
assert s != null
assert s.firstName = 'Grant'
assert s.lastName = 'McConnaughey'
}
}
这将需要使用我们的测试数据库,那么它会使它成为集成测试吗?当我将此代码作为单元测试运行时,它在assert s != null
处失败。这意味着它没有使用我们的数据库,因为它应该找到一个具有该ID的学生。
答案 0 :(得分:5)
在Grails单元测试中,您可以使用Gorm测试域类交互,并在场景后面Grails将使用内存数据库(ConcurrentHashMap的实现)来模仿此行为here。所以是的,你得到null,因为该学生不存在于内存数据库中,您需要先插入该数据。
Student.findOrSaveWhere (firstName: 'Grant',lastName : 'McConnaughey')
在您的示例中,如果要测试是否存在该数据,则需要使用集成测试并使用datasource.groovy
将其连接到您的数据库,除非您有充分的理由,否则这不是一个好主意测试你的数据。
如果您尝试再次测试def s = Student.findById(myId)
没有添加任何值,因为这是Grails动态查找程序,您可能需要信任您正在使用的框架。
但是,一般来说
单元测试通常在没有物理存在的情况下运行 涉及I / O的资源,如数据库,套接字连接或 文件link
我希望这会有所帮助