代码之家  ›  专栏  ›  技术社区  ›  suvodipMondal

Spock单元测试MockBean不适用于Micronaut 3 RequestScope bean

  •  0
  • suvodipMondal  · 技术社区  · 1 年前

    我的项目运行在micronaut 3上,我正在尝试使用Spock框架运行测试用例。以下是我为测试用例添加的依赖项和插件:

    plugins {
        id("groovy")
        // ....
    }
    
    dependencies {
        /* other dependencies */
        testImplementation "io.micronaut.test:micronaut-test-spock"
        testImplementation("org.spockframework:spock-core") {
            exclude group: "org.codehaus.groovy", module: "groovy-all"
        }
        testAnnotationProcessor "io.micronaut:micronaut-inject-java"
        testImplementation "io.micronaut:micronaut-inject-groovy"
        testImplementation "io.micronaut:micronaut-inject-java"
    }
    

    我试图为其创建MockBean的类如下所示:

    @Getter
    @Setter
    @ToString
    @RequestScope
    public class RequestAttributes {
        private String requestPath;
        private boolean setAsDefault;
        private String customerNo;
        private ChannelType channelType;
        private Double apiVersion;
    
        public RequestAttributes() {
        }
    }
    

    我正在创建这样的bean:

    import jakarta.inject.Inject
    
    @MicronautTest(propertySources = "application.yml")
    class TestCase extends  Specification {
        @Inject
        ClassToBeTested classToBeTested;
    
        @Inject
        RequestAttributes requestAttributes
    
        .... Test cases
    
        @MockBean(RequestAttributes)
        RequestAttributes mockRequestAttributes() {
            Mock(RequestAttributes)
        }
    }
    
    

    现在,当控件进入 ClassToBeTested ,发现该bean为null。bean的声明如下:

    import jakarta.inject.Inject
    
    class ClassToBeTested {
       @Inject
       RequestAttributes requestAttributes;
    }
    

    我不确定为什么会发生这种情况,我还想补充一点,当我用micronaut 1.3运行spock测试用例时,它起作用了,我正在使用 javax.inject 用于注射豆子的包装。如果有问题,有人能帮我吗 jakarta.inject 包裹

    0 回复  |  直到 1 年前