gra*_*hey 3 testing grails junit integration-testing unit-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'
}
}
Run Code Online (Sandbox Code Playgroud)
这将需要使用我们的测试数据库,那么它会进行集成测试吗?当我将此代码作为单元测试运行时,它失败了assert s != null.这意味着它没有使用我们的数据库,因为它应该找到一个具有该ID的学生.
在Grails的单元测试可以测试使用格姆域类交互和幕后Grails将使用内存数据库(即ConcurrentHashMap的实现),以模仿这种行为在这里.所以是的,你得到null,因为该学生不存在于内存数据库中,您需要先插入该数据.
Student.findOrSaveWhere (firstName: 'Grant',lastName : 'McConnaughey')
Run Code Online (Sandbox Code Playgroud)
在您的示例中,如果要测试是否存在该数据,则需要使用集成测试并使用它将其连接到数据库datasource.groovy,除非您有充分的理由测试数据,否则这不是一个好主意.
如果您尝试def s = Student.findById(myId)再次测试没有添加任何值,因为这是Grails动态查找器,您可能需要信任您正在使用的框架.
但是,总的来说
单元测试通常在没有涉及I/O的物理资源(如数据库,套接字连接或文件链接)的情况下运行
我希望这有帮助
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |