有时候,在对Grails单元测试进行一些更新时,我会遇到以下几行错误:
BUG! exception in phase 'instruction selection' in source unit ... unexpected NullpointerException
Run Code Online (Sandbox Code Playgroud)
是什么导致这个?或者调试此问题的最佳策略是什么?
当你创建一个新的grails应用程序时,默认的logback.groovy文件(几乎每个logback.groovy 的例子,甚至是Haki先生的例子)都包含以下代码,我已将其简化为关注相关部分:
root(ERROR, ['STDOUT'])
appender("FULL_STACKTRACE", FileAppender) {
file = "build/stacktrace.log"
append = true
encoder(PatternLayoutEncoder) {
pattern = "%level %logger - %msg%n"
}
}
logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false )
Run Code Online (Sandbox Code Playgroud)
但是,遵循此方法不会导致错误输出到stacktrace.log文件.
@ JeffScottBrown的答案包含以下Bootstrap.groovy文件,用于测试堆栈跟踪是否按预期记录:
class BootStrap {
def init = { servletContext ->
log.error 'this is a new error'
}
def destroy = {
}
}
Run Code Online (Sandbox Code Playgroud)
使用该引导文件,运行grails应用程序将不会产生任何输出build/stacktrace.log.
如果删除StackTrace记录器,则添加FULL_STACKTRACE到根记录器:
root(ERROR, ['STDOUT', 'FULL_STACKTRACE']
Run Code Online (Sandbox Code Playgroud)
您将获得输出到stacktrace.log.
或者,将StackTrace记录grails.app.init.Bootstrap器重命名为(感谢此行的@JeffScottBrown):
logger 'grails.app.init.BootStrap', ERROR, ['FULL_STACKTRACE'], false
Run Code Online (Sandbox Code Playgroud)
您将获得输出到stacktrace.log
这一观察让我相信 …
我正在尝试使用Spock测试src/groovy中的一些代码.我正在测试的代码引用了grailsApplication.因为它在src/groovy中,我使用依赖注入将grailsApplication注入到bean中,如下所示:
ticketRequestEmailInfo(TicketRequestEmailInfo) {
grailsApplication = ref('grailsApplication')
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是当测试代码遇到引用grailsApplication的代码行时,我得到一个NullPointerException:
java.lang.NullPointerException: Cannot get property 'config' on null object
Run Code Online (Sandbox Code Playgroud)
我的测试类有以下几点:
@TestMixin(GrailsUnitTestMixin)
class TicketRequestEmailInfoSpec extends Specification {
def setup() {
grailsApplication.config.acme.purchase.trsUrlBase = "http://localhost:8082/purchase/order/"
}
Run Code Online (Sandbox Code Playgroud)
有没有人有什么建议?
我正在尝试使用bs4/Python 3中的BeautifulSoup来提取CData.但是,每当我使用以下内容搜索它时,它都会返回一个空结果.谁能指出我做错了什么?
from bs4 import BeautifulSoup,CData
txt = '''<foobar>We have
<![CDATA[some data here]]>
and more.
</foobar>'''
soup = BeautifulSoup(txt)
for cd in soup.findAll(text=True):
if isinstance(cd, CData):
print('CData contents: %r' % cd)
Run Code Online (Sandbox Code Playgroud) grails ×3
groovy ×2
unit-testing ×2
cdata ×1
java ×1
logback ×1
python ×1
python-3.x ×1
spock ×1