Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在spring项目的单元测试中使用@Autowired_Java_Spring_Unit Testing - Fatal编程技术网

Java 无法在spring项目的单元测试中使用@Autowired

Java 无法在spring项目的单元测试中使用@Autowired,java,spring,unit-testing,Java,Spring,Unit Testing,我有一个Java的spring项目。 在这个项目中,我有一个Kafka配置类和一个使用Kafka模板并执行一些逻辑的附加类。 我试图创建一个单元测试来验证我的逻辑,但我无法@Autowire测试类中的类。 以下是我的课程: 卡夫卡构型 @Configuration @Getter @PropertySource(value = "classpath:realtime.properties") public class KafkaProducerConfig { @Va

我有一个Java的spring项目。 在这个项目中,我有一个Kafka配置类和一个使用Kafka模板并执行一些逻辑的附加类。 我试图创建一个单元测试来验证我的逻辑,但我无法
@Autowire
测试类中的类。 以下是我的课程: 卡夫卡构型

@Configuration
@Getter
@PropertySource(value = "classpath:realtime.properties")
public class KafkaProducerConfig {
    @Value("${kafka.producer.client.id}")
    private String producerClientId;
    @Value("${kafka.url}")
    private String kafkaUrl;
    @Value("${kafka.retries.config}")
    private int retryConfig;

    @Bean
    public ProducerFactory<Void, SomeClass1> producerFactory1() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaUrl);
        configProps.put(ProducerConfig.CLIENT_ID_CONFIG, producerClientId.concat("_someClass1"));
        configProps.put(ProducerConfig.RETRIES_CONFIG, retryConfig);
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, VoidSerializer.class.getName());
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AvroSerde.serializerFor(SomeClass1.class));

        return new DefaultKafkaProducerFactory<>(configProps);
    }

    @Bean
    public KafkaTemplate<Void, SomeClass1> kafkaTemplate1() {
        return new KafkaTemplate<>(producerFactory1());
    }

    @Bean
    public ProducerFactory<Void, someClass2> producerFactory2() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaUrl);
        configProps.put(ProducerConfig.CLIENT_ID_CONFIG, producerClientId.concat("_someClass2"));
        configProps.put(ProducerConfig.RETRIES_CONFIG, retryConfig);
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, VoidSerializer.class.getName());
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AvroSerde.serializerFor(someClass2.class));

        return new DefaultKafkaProducerFactory<>(configProps);
    }

    @Bean
    public KafkaTemplate<Void, someClass2> kafkaTemplate2() {
        return new KafkaTemplate<>(producerFactory2());
    }

} 
运行测试时,
filterPublisher
始终为空。 我错过了什么?我做错了什么?我怎么修理它

我还尝试在测试类
@import(TestConfig.class)

但结果是一样的

任何帮助都将不胜感激,谢谢。

终于让它工作了, 以下是测试类的代码:

@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest(classes = {FilterPublisher.class, KafkaProducerConfig.class})
public class FilterPublisherTest {
    @Autowired
    private FilterPublisher filterPublisher;

    @Test
    public void tmpTest() {
        filterPublisher.processConfigurations();
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {FilterPublisher.class, KafkaProducerConfig.class})
public class FilterPublisherTest {

    @Autowired
    ApplicationContext context;

    @Autowired
    FilterPublisher filterPublisher;

     // ALL TEST METHODS GO HERE

}

您不应该自动连接要测试的类。实例化它,模拟任何成员,并测试它如果导入KafkaProducerConfig,可能不会扫描该组件(将正确的组件扫描添加到该类将解决您的问题)。顺便说一句,我建议您遵循@Stultuske advice如果我只是实例化这个类,kafkaTemplates将如何启动?组件扫描应该包括项目的路径?我已经向测试类添加了
@ComponentScan({“com.path.to.kafka”,“com.path.to.publisher”})
,但它没有help@Dan事实上,它与Spring无关,所以您是否经常使用Spring不应该成为一个问题
@TestConfiguration
public class TestConfig {

    @Bean
    public FilterPublisher filterPublisher() {
        return new FilterPublisher();
    }

} 
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {FilterPublisher.class, KafkaProducerConfig.class})
public class FilterPublisherTest {

    @Autowired
    ApplicationContext context;

    @Autowired
    FilterPublisher filterPublisher;

     // ALL TEST METHODS GO HERE

}