【发布时间】:2021-02-25 09:49:05
【问题描述】:
我正在单元测试一个类 AuthController,它有这个构造函数
@Autowired
public AuthController(DynamicBeanFactory beanService) {
Sysout(beanService); //here null is coming - Point-1
}
在测试课上,我做了:
@Mock
DynamicBeanFactory beanService;
@InjectMocks
AuthController authController(beanService);
- Below @Test are there -
现在当我运行这个时:
point-1 上面的构造函数中的 beanService 的值即将到来 null。
另外,当我在 @InjectMocks 的地方做 @Autowired 时,它可以工作。
下面我分享了人们提出的一些问题。
问)什么是 AuthController?
A)它只是一个具有我上面共享的构造函数的类。
Q) 什么是动态 Bean 工厂?
A) 这是一个类似下面的服务类:
@Service
public class DynamicBeanFactory
@Autowired
public DynamicBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory)
}
}
【问题讨论】:
-
你需要使用
@Mock而不是@Autowired,也不要把spring和mocking混为一谈。您不应该在单元测试中真正使用 spring -
@Lino 仍然 null 正在进入构造函数。
-
请提供完整的minimal reproducible example,目前您的代码无法编译。
AuthController authController(beanService)是什么? -
我已经更新了问题,请检查。
-
它仍然不是minimal reproducible example。你是如何运行你的测试的?你是如何初始化你的模拟的(你是在
@BeforeEach中使用MockitoAnnotations.init(this),还是在使用@RunWith(MockitoJUnitRunner.class))?还有很多悬而未决的问题
标签: java unit-testing mocking mockito junit5