Grails单元或集成测试?

时间:2013-07-15 15:10:50

标签: unit-testing testing grails junit integration-testing

我不知道是否要在我的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的学生。

1 个答案:

答案 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

我希望这会有所帮助