【问题标题】:spring boot integration test: Autowired members have null membersspring boot 集成测试:Autowired 成员有空成员
【发布时间】:2017-04-19 12:19:42
【问题描述】:

我对使用 spring boot 1.5.2.RELEASE 构建的 spring-data-rest webapp 进行了以下 spock 集成测试。

    @SpringBootTest(classes = com.my.server.Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
class MyWebAppSpec extends Specification {    

    @Autowired
    DemoData demoData;

    def setup() {
        createDemoData();
    }     

    private void createDemoData() {
        if (demoData.myMap.keySet().size() == 0) {
            demoData.load();
        }        
    }
...
}

DemoData 类如下所示:

@Component
public class DemoData {

    public Map<String, String> myMap = new HashMap<>();

    public void load() {...}
...
}

我发现在 MyWebAppSpec demoData.myMap 的 createDemoData 方法中是 null 而不是空 Map。当我在 DemoData 类中将其初始化为空地图时,为什么会这样,我该如何解决这个问题?

【问题讨论】:

    标签: spring-boot integration-testing spock


    【解决方案1】:

    我不完全理解为什么我看到 DemoData 成员 myMap 为空,但我已确定解决该问题。

    修复方法是使 DemoData 成员 myMap 受保护/私有,并添加访问器方法来访问它。这解决了问题。我猜这可能是由于 spring 使用 CGLIB 代理以及如何定义切入点。也许它是春天的一个可以修复的错误?

    使用解决方法,我的测试代码如下所示:

        @SpringBootTest(classes = com.my.server.Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
    class MyWebAppSpec extends Specification {    
    
        @Autowired
        DemoData demoData;
    
        def setup() {
            createDemoData();
        }     
    
        private void createDemoData() {
            if (demoData.getMyMap().keySet().size() == 0) { //NOTE accessor method used here
                demoData.load();
            }        
        }
    ...
    }
    

    我的 DemoData 类看起来像这样:

    @Component
    public class DemoData {
    
        protected Map<String, String> myMap = new HashMap<>(); //NOTE: member is protected now
    
        public Map<String, String> getMyMap() { //NOTE: Accessor method added here
            return myMap;
        }
    
    
        public void load() {...}
    ..
    

    。 }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2020-04-24
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多