gpt4 book ai didi

grails - 用于单元测试中grails服务属性的NullPointerException

转载 作者:行者123 更新时间:2023-12-02 15:05:40 24 4
gpt4 key购买 nike

在grails 2.5.1中,我仅创建了一个具有通过构造函数初始化的简单属性的服务(也为@PostConstruct)

通过服务方法读取此属性的任何单元测试都将收到NullPointerException

复制方法如下:

grails> create-app acme
grails> create-service DataService

acme / DataService.groovy
@Transactional
class DataService {

def data = null;

@PostConstruct
def setup() {
if (data == null) {
println("Initializing the service ...")
data = "<DATA>"
}
}

def serviceMethod() {
setup()
}

def getDataLength() {
println("Getting data length ...")
return data.length(); // Line 26
}
}

acme / DataServiceSpec.groovy
@TestFor(DataService)
class DataServiceSpec extends Specification {

def setup() {
}

def cleanup() {
}

void "test data"() {
given:
int datalen = service.getDataLength()
expect:
datalen > 0
}
}

运行测试....
grails> test-app -unit -echoOut

输出 ...
|Running 2 unit tests...
|Running 2 unit tests... 1 of 2
--Output from test data--
Initializing the service ...
Getting data length ...
Failure: |
test data(acme.DataServiceSpec)
|
java.lang.NullPointerException: Cannot invoke method length() on null object
at acme.DataService.getDataLength(DataService.groovy:26)
at acme.DataServiceSpec.test data(DataServiceSpec.groovy:20)
|Completed 1 unit test, 1 failed in 0m 2s
.Tests FAILED

日志显示了属性初始化步骤和该属性的NullPointerException。

问题是:
  • 为什么'data'属性变为null?
  • 有一个服务生命周期,将该属性设置为null?
  • 运行中的测试是否使用了与初始化实例不同的DataService实例?
  • 最佳答案

    你见过Grails unit test fails on @PostConstruct吗?

    在单元测试中,并带有@TestFor注释的@PostConstruct不被调用。您可以为测试或调用设置方法创建构造。

    关于grails - 用于单元测试中grails服务属性的NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832259/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com