[Groovy] 新人学习Groovy遇到的test问题

xjhjf80808 2009-11-16
这段时间在自学《Grails 权威指南》,学到第6章 测试的时候遇到一些问题:
【本人代码完全源自书上】
1.命令 : grails create-test-suite 运行不了,我用grails help看到一个 create-unit-test
但此命令老是报No signature of method: Bookmark.save() is applicable for argument types: () values: []"

2.参考网上,用integration-test,即使数据库有数据,也报错: "values: []"

3.书上说有create-webtest命令,但我在grails help的情况下没发现此命令,执行也没效果

哪位大大知道告诉下,很痛苦啊......

下面是我参考代码,完全照书上:
1.Bookmark.groovy
class Bookmark {

static hasMany = [tags : Tag];
URL url;
String title;
String notes;
Date dateCreated;
Integer rating;
String type;

    static constraints = {
    url(url : true);
    title(blank : false);
    notes(maxSize : 1000);
    rating(range : 1..10);
    type(inList : ['blog','article','general','news']);
    }
   
    String toString(){
    return "$title - $url";
    }
}
2.BookmarkTests.groovy
import grails.test.*

class BookmarkTests extends GrailsUnitTestCase {
protected void setUp() {
    new Bookmark(title : "Skills Mater", url : new URL("http://skillsmatter.com"), rating : 5, type : 'blog', dateCreated : new Date()).save();
    new Bookmark(title : "Canoo", url : new URL("http://canoo.com"), rating : 5, type : 'blog', dateCreated : new Date()).save();
    new Bookmark(title : "Grails", url : new URL("http://grails.org"), rating : 5, type : 'blog', dateCreated : new Date()).save();
    new Bookmark(title : "Groovy", url : new URL("http://groovy.org"), rating : 5, type : 'blog', dateCreated : new Date()).save();
    }

    protected void tearDown() {
    Bookmark.list()*.delete();
    }

    void testSortBookmarks(){
   
    def sortUrlsBy = {property ->
    Bookmark.findAll().sort{it."$property"}.url;
    }
    def urls = sortUrlsBy("title");
   
    assert urls;
    assert urls.size() == 4;
    assert urls[0].toString() == "http://canoo.com";
    assert urls[1].toString() == "http://grails.org";
    }
}

helian 2009-11-16
grails你用什么版本的?权威指南里是什么版本?

unit test里应该是不行的,save等动态方法都没有注入。

integration test里应该可以啊。你确定你跑的是integration test么?

functional test是对正在运行的grails应用进行http 请求模拟,验证返回的response,所以不能直接去进行BookMark.save()这种操作。
JohnnyJian 2009-11-16
可以用mockDomain
xjhjf80808 2009-11-17
我用的是grails1.1.1,权威指南里是0.5
我用integration test报的就是读出的数据为空,不知道为什么。
而且我的工程师直接在Eclipse里生成的,不知道会不会有影响?
xjhjf80808 2009-11-17
已经可以了,用integration test,不知道上次可能没配好吧,谢谢啦
helian 2009-11-17
权威指南有点out,grails已经沧海桑田了。
xjhjf80808 2009-11-17
⊙﹏⊙b汗,那我现在要学习grails得看什么书呢?刚才的问题没解决,原来是我搞错了,用integration test也不可以,楼上的推荐本书吧
helian 2009-11-17
xjhjf80808 写道
⊙﹏⊙b汗,那我现在要学习grails得看什么书呢?刚才的问题没解决,原来是我搞错了,用integration test也不可以,楼上的推荐本书吧


grails的书还真不多。我都是看文档的。。。权威指南的代码可能不太能用了,概念解释应该还是没问题的。例子嘛可以研究一下grails网站的源码:

http://github.com/grails/grails/tree/master/grails-samples/grails.org/
anzimu 2009-11-26
create-webtest 是function-test插进带的命令 你肯定还没有装这个插进
Global site tag (gtag.js) - Google Analytics