Grails域类单元测试,约束设置问题-java.lang.NoClassDefFoundError:无法初始化

v1p

我对域类的grails单元测试抛出了此异常:

|  java.lang.NoClassDefFoundError: Could not initialize class com.pkg.common.Configuration
    at com.pkg.DomainClass$__clinit__closure1.doCall(DomainClass.groovy:10)
    at org.grails.datastore.mapping.config.groovy.MappingConfigurationBuilder.evaluate(MappingConfigurationBuilder.groovy:72)
    at org.grails.datastore.mapping.config.AbstractGormMappingFactory.createMappedForm(AbstractGormMappingFactory.java:51)
    at org.grails.datastore.mapping.keyvalue.mapping.config.GormKeyValueMappingFactory.createMappedForm(GormKeyValueMappingFactory.java:37)
    at org.grails.datastore.mapping.keyvalue.mapping.config.GormKeyValueMappingFactory.createMappedForm(GormKeyValueMappingFactory.java:27)
    at org.grails.datastore.mapping.keyvalue.mapping.config.KeyValuePersistentEntity.<init>(KeyValuePersistentEntity.java:33)
    at org.grails.datastore.mapping.keyvalue.mapping.config.KeyValueMappingContext.createPersistentEntity(KeyValueMappingContext.java:89)
    at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntityInternal(AbstractMappingContext.java:159)
    at org.grails.datastore.mapping.model.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:152)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:133)
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:129)

以下是我精简的Domain类:

package com.pkg

import com.pkg.common.Configuration

class DomainClass {

    String subject

    static constraints = {
        subject(maxSize: 100, nullable: false, blank: false, matches: Configuration.ALLOWED_TEXT_CHARS)
    }
}

我的com.pkg.common.Configuration类只是具有静态属性的Singleton:

package com.pkg.common

import grails.util.Holders

class Configuration{
    final public static String ALLOWED_TEXT_CHARS = "${Holders.grailsApplication.metadata["allowed.text.chars"]}"
}

“ allowed.text.chars”是在application.properties中定义的RegEx:

allowed.text.chars=[a-zA-Z0-9\\p{L}\\p{Digit}_"` $ \\-'_&;\:#()/\\.,!\\?%*|<>]+

现在,为什么仅仅为了建立约束就这么痛苦呢?好吧,我需要让我的15个以上域中的所有文本字段保持一致,就它们接受的字符而言。由于这是业务驱动的需求,因此我需要保持其可配置性,以便我们可以随时删除/添加任何新字符,而不必出于完整性考虑而接触过多的域类。除此之外,我还想在其他Service类中使用可用的正则表达式。

现在,此实现在运行应用程序,生产和测试应用程序集成中效果很好:唯一的问题是单元测试用例。我了解的是,在单元测试环境中,Grails这样的依赖项将无法自动注入。

我们可以使用metaClass操作模拟并添加Configuration类吗?我已经尝试过但是失败了。(阅读:我不知道静态类的模拟是如何工作的以及如何将它们添加到metaClass)

或者,如果还有另一种方法来实现这种概念?

许多Thnx

多纳尔

为了避免在多个域类之间重复约束,可以使用共享约束或全局约束

如果使用全局约束,则要使您能够从服务类访问正则表达式,请将正则表达式存储在单独的配置参数中。

Config.groovy

allowed.text.chars='bigLongRegex'

grails.gorm.default.constraints = {
    subject matches: allowed.text.chars
}

服务等级

class MyService {

   GrailsApplication grailsApplication

   void something() {
      String regex = grailsApplication.config.allowed.text.chars
   }
}

如果要编写测试域类约束的单元测试,请记住添加@Mock注释,例如

@Mock([DomainClass])
class DomainClassTests {
   void testConstraint() {
     // test code goes here
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.NoClassDefFoundError:无法初始化类org.powermock.modules.junit4.rule.PowerMockRule

java.lang.NoClassDefFoundError:无法初始化类javax.media.jai.JAI

java.lang.NoClassDefFoundError:无法初始化类org.bytedeco.javacpp.avutil

java.lang.NoClassDefFoundError:无法初始化类java.awt.Toolkit

java.lang.NoClassDefFoundError:无法初始化类XXX

VM初始化期间发生错误(java / lang / NoClassDefFoundError:java / lang / Object)

获取NoClassDefFoundError:无法初始化类org.codehaus.groovy.vmplugin.v7.Java7

java.lang.NoClassDefFoundError:测试模块无法解析其他功能模块的类,单元测试-Kotlin-Android

java.lang.BootstrapMethodError:雅典娜java类调用站点初始化异常

原因:java.lang.NoClassDefFoundError:无法初始化类com.jayway.restassured.RestAssured

拒绝对先前失败的类java.lang.Class <nt>进行重新初始化:java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError:无法初始化类xxx.xxx.xxx.HibernateUtil

春季:java.lang.NoClassDefFoundError:无法初始化类

java.lang.NoClassDefFoundError:无法初始化com.datastax.driver.core.Cluster类

ARM64计算机上的Cassandra启动失败(java.lang.NoClassDefFoundError:无法初始化com.sun.jna.Native类)

Zeppelin java.lang.NoClassDefFoundError:无法初始化类org.apache.spark.rdd.RDDOperationScope $

关于java.lang.NoClassDefFoundError:无法初始化类org.xerial.snappy.Snappy

java.lang.IllegalStateException:无法初始化插件:MockMaker

ule子-NoClassDefFoundError:无法初始化类java.time.zone.ZoneRulesProvider

java.lang.NoClassDefFoundError:无法初始化com.googlecode.objectify.ObjectifyService类

带有Java 9 java.lang.NoClassDefFoundError的Oracle JDBC驱动程序:无法初始化类oracle.jdbc.OracleDriver

Corda-无法初始化主类胶囊(引起原因:java.lang.NoClassDefFoundError:java / lang / instrument / Instrumentation)

获取java.lang.NoClassDefFoundError:升级到POI 4.0.0后无法初始化类org.apache.poi.ooxml.util.DocumentHelper

原因:java.lang.NoClassDefFoundError:无法初始化类javassist.util.proxy.DefineClassHelper

mapGroupsWithState引发错误原因:java.lang.NoClassDefFoundError:无法初始化

java.lang.NoClassDefFoundError:无法初始化类org.springframework.mail.javamail.SmartMimeMessage

java.lang.NoClassDefFoundError:无法初始化类sun.nio.ch.FileChannelImpl

java.lang.NoClassDefFoundError:无法初始化类org.apache.commons.logging.LogFactory

线程“主”中的异常java.lang.NoClassDefFoundError无法初始化类org.bytedeco.javacpp.avutil