仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试
Posted
技术标签:
【中文标题】仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试【英文标题】:Unit testing with SpringJUnit4ClassRunner using only @Component and @Autowired 【发布时间】:2018-11-14 20:22:57 【问题描述】:我有以下课程:
@Component
public class MyClass
@Autowired MyPojo pojo;
如何在不模拟注入的 bean 的情况下对其进行测试?我没有有配置 [XML 或声明性]。 我做了以下事情:
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan
public class MyClassTest
@Autowired MyClass myClass;
@Test
public void test()
this.myClass...()
【问题讨论】:
你想在那个 test() 函数中做什么。请详细说明 【参考方案1】:如果您不想使用任何类型的配置,无论是 Java 还是 XML 配置,您都可以使用 @ContextConfiguration
并列出您的组件类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyPojo.class, MyClass.class )
public class MyClassTest
@Autowired
private MyClass myClass;
@Test
public void test()
// myClass...
请注意MyPojo
类也应该用@Component
注释。
但是,在现实生活场景中,您可能至少需要一个@Configuration
类(也可以与@ContextConfiguration
一起使用)。
有关 Spring 集成测试支持的更多信息,请参阅 Spring Documentation。
【讨论】:
我最终按照您的描述将这些类添加到了 ContextConfiguration 中。事实证明,对于我的场景,我不需要 @configuration 类,因为我的用例仅适用于组件和自动装配。在这种情况下,我对初始化 bean 没有用处。以上是关于仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
Could not autowire. No beans of 'TbItemMapper' type found. less... (Ctrl+F1) Checks autowir
如何通过仅在react-router-dom中使用slug的路由访问不同的组件?