无法实例化@InjectMocks字段

时间:2019-07-26 06:01:29

标签: java spring-boot junit mockito log4j

我创建了一个用于记录log4j的包装器,扩展了HandlerInterceptorAdapter并保持了构建类型maven项目。我在Spring Boot应用程序中将此项目用作外部JAR。在我的控制器中使用Logger。我已经为此编写了JUnits,它们工作正常,但在mvn安装期间出现异常。

DemoLogger是一个接口,它公开要记录的功能。 DemoLogger是maven项目的一部分,该项目是一个外部jar。

控制器

@RestController @RequestMapping("/api/v1")
public class DemoController {

    private DemoLogger logger = LoggerFactory.createLog(DemoController.class);

    @GetMapping("/demo")
    public ResponseEntity<String> getString() {
        logger.info("This is test debug");
        return new ResponseEntity("Hello World", HttpStatus.OK);
    }
}

JUnit

public class DemoControllerTest {

    @InjectMocks private DemoController demoController;

    @Before public void setup() {
        MockitoAnnotations.initMocks(this);
    }

    @Test public void shouldReturnString()throws Exception {
        final String body = demoController.getString().getBody().toString();
        assertEquals("Hello World", body);
    }
}

错误日志

Cannot instantiate @InjectMocks field named 'demoController' of type 'class dev.example.controller.DemoController'.
You haven't provided the instance at field declaration so I tried to construct the instance.
However the constructor or the initialization block threw an exception : dev/example2/logger/factory/LoggerFactory

at dev.example.controller.DemoControllerTest.setup(DemoControllerTest.java:18)
Caused by: java.lang.NoClassDefFoundError: dev/example2/logger/factory/LoggerFactory

1 个答案:

答案 0 :(得分:1)

这似乎更像是Mockito的Maven问题。

很可能您正在使用该jar,而没有在pom中将其指定为依赖项。

它很可能是您手动将其添加到类路径中而在您的本地IDE中工作的。

尝试将该jar安装到本地.m2(或理想情况下,安装在您公司的Nexus或类似产品上),然后运行构建:

mvn install:install-file

更多信息here