【问题标题】:Grails unit test case showing Completed 0 spock test, 0 failedGrails 单元测试用例显示 Completed 0 spock test, 0 failed
【发布时间】:2014-06-23 11:58:15
【问题描述】:

我是 Grails 的新手。我正在使用版本 2.2.2 即使它说测试用例通过了,我的测试用例也没有运行。 运行测试用例后,我收到以下消息。

正在解决 [test] 依赖项... 正在解决 [运行时] 依赖项... |正在编译 1 个源文件。
|错误 log4j:ERROR 配置 log4j 时缺少属性:grails |错误 log4j:ERROR 配置 log4j 时缺少属性:grails |错误 log4j:错误警告:配置 log4j 日志记录时发生异常:null | 完成 0 个 spock 测试,0 个在 1409 毫秒内失败
|测试通过 - 在 D:\workspace_idea\optapp\target\test-reports 中查看报告

@TestFor(KpiLog)
@TestMixin(DomainClassUnitTestMixin)
@Mock(KpiLog)
class KpiLogSpec extends Specification {

    void "savelog"() {
        prinln "*********"
        when:
        def kpiLog = new KpiLog(scenarioId: 1, kpiId: 2, deltaKpi: 5)
        kpiLog.save(flush: true)

        then:
        KpiLog.list()!= null
    }

    void testSaveFacebookUser(){
        //given
        def kpiLog = new KpiLog(scenarioId: 1, kpiId: 2, deltaKpi: 5)
        //adminRole.addToPermissions("*:*")
        kpiLog.save()
    }
}

谁能告诉我我做错了什么?

我以grails test-app -unit KpiLogSpec 身份运行测试用例

这是 Config.groovy 文件中的 log4j 部分

    log4j = {
// Example of changing the log pattern for the default console
// appender:
//
//appenders {
//    console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
//}
debug 'grails.app'
error  'org.codehaus.groovy.grails.web.servlet',  //  controllers
        'org.codehaus.groovy.grails.web.pages', //  GSP
        'org.codehaus.groovy.grails.web.sitemesh', //  layouts
        'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
        'org.codehaus.groovy.grails.web.mapping', // URL mapping
        'org.codehaus.groovy.grails.commons', // core / classloading
        'org.codehaus.groovy.grails.plugins', // plugins
        'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
        'org.springframework',
        'org.hibernate',
        'net.sf.ehcache.hibernate'

appenders {
    console name:'S', layout:pattern(conversionPattern: '%d %-5p %c - %m%n')
    //rollingFile name: 'R', file:'/usr/local/jd/logs/optimizer.log',maxFileSize: '5000000KB'
    rollingFile name: 'R', file:grails.config.logPath, maxFileSize: '5000000KB'
    environments {
        production {
            appender new AWSSNSAppender(
                name:'SNS' ,
                topicName:config.optimizer.snsAppender.topicName,
                topicSubject:config.optimizer.snsAppender.topicSubject,
                awsAccessKey:config.optimizer.aws.accessKey,
                awsSecretKey:config.optimizer.aws.secretKey,
                threshold:Level.toLevel(optimizer.snsAppender.threshold, Level.ERROR)
            )
        }
    }
}
info R: ['NotifierService', 'aggDataStackLog','constraintGroupLog','pageFilterLog','alertDebugLog','dacCacLog','tpFlagExportImportLog','timelog','calculationProgress','dictionaryLog','loginServiceLog', 'calculateScenarioLog','connectionLog','dataLabelServiceLog','cross-section-service','qe-basic-executor-service','qe-plan-enumerator-impl-service','qe-basic-planenum-ssservice','ct-dimension-hierarchy-service','cbRuleLog'],additivity:true
error SNS: ['aggDataStackLog','constraintGroupLog','pageFilterLog','alertDebugLog','dacCacLog','tpFlagExportImportLog','timelog','calculationProgress','dictionaryLog','loginServiceLog', 'calculateScenarioLog','connectionLog','dataLabelServiceLog','cross-section-service','qe-basic-executor-service','qe-plan-enumerator-impl-service','qe-basic-planenum-ssservice','ct-dimension-hierarchy-service','cbRuleLog'],additivity:true
//info SNS: ['aggDataStackLog','calculateScenarioLog']
/*root {
    error 'R'
    additivity = true
}   */

}

这是我运行的测试代码。

  @TestMixin(GrailsUnitTestMixin)
class FooSpec extends Specification {

def setup() {
}

def cleanup() {
}

void "test something"() {
    println "****************testing in real "
    assertTrue(1==1)
}
}

【问题讨论】:

    标签: unit-testing grails grails-2.2


    【解决方案1】:

    像这样运行测试用例

    grails test-app unit: KpiLog
    

    重要的是你使用unit:而不是-unitKpiLog而不是KpiLogSpec

    那就不要定义变量log

    def log = new KpiLog(scenarioId: 1, kpiId: 2, deltaKpi: 5)
    

    它是为登录 Grails 类(控制器、服务等)而保留的。将变量从log重命名为kpiLog

    def kpiLog = new KpiLog(scenarioId: 1, kpiId: 2, deltaKpi: 5)
    

    简单的日志配置即可

    log4j = {
        appenders {
            console name: 'stdout', layout: pattern(conversionPattern: '%d [%t] %-5p %c - %m%n')
        }
    
        error  'org.codehaus.groovy.grails.web.servlet',        // controllers
               'org.codehaus.groovy.grails.web.pages',          // GSP
               'org.codehaus.groovy.grails.web.sitemesh',       // layouts
               'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
               'org.codehaus.groovy.grails.web.mapping',        // URL mapping
               'org.codehaus.groovy.grails.commons',            // core / classloading
               'org.codehaus.groovy.grails.plugins',            // plugins
               'org.codehaus.groovy.grails.orm.hibernate',      // hibernate integration
               'org.springframework',
               'org.hibernate',
               'net.sf.ehcache.hibernate'
    }
    

    【讨论】:

    • 谢谢@saw303。现在我可以看到它正在运行测试用例,但是它仍然失败并出现“ groovy.lang.MissingPropertyException: No such property: className for class: org.junit.runner.Description”
    • 我扩展了我的答案。请检查它
    • 我修改为kpiLog。我仍然遇到同样的错误。
    • 你跑grails clean了吗?那么您是否尝试过仅使用简单的控制台附加程序来隔离问题?您的日志记录配置可能是问题的一部分。
    • 我尝试了多种组合来记录日志,但都成功了。我仍然遇到同样的错误。您能否建议一个简单的日志记录,它将在控制台上吐出所有内容。我也会试试的
    【解决方案2】:

    终于,它开始工作了。这是因为 lib 文件夹中的 jar msutil。我从我的一位朋友那里得到了这个信息,它有一些不兼容。我换了他寄来的罐子,事情开始起作用了。

    非常感谢 saw303 对我的问题保持耐心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      相关资源
      最近更新 更多