当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中运行测试的不满意依赖项

左丘繁
2023-03-14

我已经使用Spring Initializer、嵌入式Tomcat Thymeleaf模板引擎生成了一个Spring Boot web应用程序,并将其打包为一个可执行的JAR文件。

使用的技术:

Spring引导1.4.2。释放,Spring4.3.4。释放,胸腺2.1.5。释放,Tomcat嵌入8.5.6,Maven 3,Java8

我有一个测试:

    @ContextConfiguration(classes={PersistenceConfig.class})
    @RunWith(SpringRunner.class)
    public class BooksManagerTests {

        /**
         * The object being tested.
         */
        @Autowired
        BooksManager booksManager;


        @Test
        public void testfindDeviceByKey() {
                            booksManager.findDeviceByKey("C380F");
        }
    }


    @Configuration
    public class PersistenceConfig {

        @Bean
        public  JdbcTemplate jdbcTemplate() {
            return new JdbcTemplate(dataSource());
        }


        @Bean 
        public BooksManager booksManager() {
            return new BooksManagerImpl();
        }

        /**
         * Creates an in-memory "rewards" database populated 
         * with test data for fast testing
         */
        @Bean
        public DataSource dataSource(){
            return
                (new EmbeddedDatabaseBuilder())
                .addScript("classpath:db/H2.schema.sql")
                .addScript("classpath:db/H2.data.sql")
                .build();
        }

    }


    @Service("booksManager")
    public class BooksManagerImpl implements BooksManager {


        private DeviceEventRepository deviceEventRepository;

        @Autowired
        public void setDeviceEventRepository(DeviceEventRepository   deviceEventRepository) {
            this.deviceEventRepository = deviceEventRepository;
        }

        @Override
        public List<DeviceEvent> getAllDeviceEvents() {
            return deviceEventRepository.getAllDeviceEvents();
        }
    }


@Repository("deviceEventRepository")
public class JdbcDeviceEventRepository implements DeviceEventRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;


    @Override
    public List<DeviceEvent> getAllDeviceEvents() {
        String sql = "select * from t_device_event";
        return mapDeviceEvents(jdbcTemplate.queryForList(sql));
    }

    private List<DeviceEvent> mapDeviceEvents(List<Map<String,Object>> deviceEventsMap) {
        return null;
    }


}

但是我运行测试时遇到了这个错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'booksManager': Unsatisfied dependency expressed through method 'setDeviceEventRepository' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tdk.repository.DeviceEventRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

共有2个答案

闾丘选
2023-03-14

应用程序在初始化期间仅指定一个配置:

@ContextConfiguration(类={PersistenceConfig.class})

您需要通过指定这样的主程序来启动应用程序,以启用Spring Boot自动配置:

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

有关JPA存储库自动配置的详细信息,请参阅JPA存储库自动配置。

松亦
2023-03-14

已解决将此添加到PersistenceConfig类的问题

@Bean 
    public DeviceEventRepository deviceEventRepository() {
        return new JdbcDeviceEventRepository();
    }
 类似资料:
  • org.springframework.beans.factory.unsatisfiedDependencyException:创建名为“com.sonos.arcor.service.AddressServiceTest”的bean时出错:通过字段“service”表示的未满足的依赖项;嵌套异常为org.springframework.beans.factory.noSuchBeanDefin

  • 我的TestNG测试如下: 如果Test1或Test2中的任何一个被传递,我希望我的Test3被执行。TestNG的工作方式似乎总是检查Test1和Test2是否都被传递。有没有办法可以将逻辑AND更改为逻辑OR。我还尝试过指定像这样的依赖方法,但运气不好 我还尝试了依赖组,但这再次检查是否所有相应的测试都在逻辑与中传递。运行上述测试后,我将获得以下输出:

  • 我正在开发一个Spring Boot应用程序,其中我声明了一个组件,如下所示: 我想让它成为一个单例bean(因为默认情况下组件是单例的,所以我没有添加显式声明)。 我在类中添加了一个私有构造函数。 我有一个定义bean的配置类。 我还有应用程序和控制器类。 我的单元测试用例如下所示: 在上面的代码中,如果我运行单元测试,我将得到以下异常。 通过字段“repositoryMaster”表示的未满足

  • 我想知道如何执行一个文件或实体来理解我现在要运行指定的JUnit5案例列表? 我知道JUnit5中的一些类似于测试套件的新功能即将出现,但它们显然现在还没有出现,期望在不久的将来出现可能过于乐观了。我现在已经积累了几个测试,接下来还有几个,必须独立地启动每个测试越来越乏味,随着测试数量的增加,这种情况只会变得更糟。今天我是否可以编写代码来自动一次运行多个测试?这将使我渡过难关,直到即将到来的代码可

  • 我正在开发一个spring启动应用程序并编写一些junit测试。 但我发现,当我运行任何测试时,tomcat也会启动,这使得这些测试非常缓慢,浪费了很多时间。 当我开发一个SpringMvc应用程序时,junit测试可以在不启动tomcat的情况下运行,这节省了很多时间。 所以,我想问它在那里无论如何要运行启动tomcat的springstart测试?

  • 我能够部署一个RESTEasy应用程序,可以很好地使用Weld(这意味着我的CDI可以工作),但我在集成测试中遇到了一些麻烦。我得到这个错误: 在测试时: 日志中的最后一条消息是