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

Spring启动测试与属性转换器不工作与Maven测试

刁茂才
2023-03-14

我有Spring Boot单元测试(用@SpringBootTest注释的类),在使用我的IDE时运行良好。当我使用Maven(mvn测试)运行它们时,它们都因相同的原因而失败:

原因:组织。springframework。豆。工厂BeanCreationException:创建名为“entityManagerFactory”的bean时出错,该bean在类路径资源[my/package/config/DatasourceConfiguration.class]中定义:调用init方法失败;嵌套异常为org。冬眠AnnotationException:无法实例化AttributeConverter[my.package.enum.AbstractEnumConverter],原因是:org。冬眠AnnotationException:无法实例化AttributeConverter[my.package.enum.AbstractEnumConverter],原因是:java。lang.NoSuchMethodException:我的。包裹AbstractEnumConverter。

我使用一个通用的AbstractEnumConverter来转换实体上的枚举。看起来是这样的:

@Converter
public abstract class AbstractEnumConverter<T extends Enum<T> & EnumInterface<E>, E> implements AttributeConverter<T, E> {

    private static Logger logger = LoggerFactory.getLogger(AbstractEnumConverter.class);
    private final Class<T> clazz;

    public AbstractEnumConverter(Class<T> clazz) {
        this.clazz = clazz;
    }

    @Override
    public E convertToDatabaseColumn(T attribute) {
        return attribute != null ? attribute.getKey() : null;
    }

    @Override
    public T convertToEntityAttribute(E dbData) {
        if (dbData == null)
            return null;

        T[] enums = clazz.getEnumConstants();

        for (T e : enums) {
            if (e.getKey().equals(dbData))
                return e;
        }

        logger.info("Could not find value {} for class {}",dbData,clazz.getName());
        return null;
    }
}

下面是我使用的枚举示例:

public enum ExampleEnum implements EnumInterface<Integer> {

    KEY(1);

    private final Integer key;

    ExampleEnum(Integer key) {
        this.key = key;
    }

    @Override
    public Integer getKey() {
        return key;
    }
    
    public static class Converter extends AbstractEnumConverter<ExampleEnum, Integer> {
        public Converter() {
            super(ExampleEnum.class);
        }
    }
}

似乎maven试图实例化我的AbstractEnumConverter类,原因我不知道。在IDE单元测试和运行应用程序时,一切正常。

共有1个答案

鲁博赡
2023-03-14

Hibernate将@Converter注释解释为它应该实例化您的类并注册它,但它是一个没有默认构造函数的抽象类(您缺少的

 类似资料:
  • 我正在尝试测试以下控制器: 下面是测试类: 当我运行测试失败,并给我以下消息: 当我测试的url正常工作。

  • 我有一个带有Java配置类的Spring(4.2.5)项目。这些在正常运行项目时起作用,但我无法使我的测试工作。在下面的测试中,为空。 如果添加注释,则会出现异常 其中和在和中定义,后者是基于活动配置文件选择的。 [编辑2] 经过更多的搜索,我发现了这个问题,并且在检查了我的依赖项之后,我发现我在maven依赖项下有Spring-Core-4.1.9,而且我没有在我的POM中包含一个依赖项。添加依

  • 我将应用程序中的Spring boot版本从2.4.4升级到2.5.0,它停止公开 /actuator/infoendpoint。这是pom.xml和application.yml pom。xml 应用yml公司 使用spring boot父版本2.4.4,应用程序能够公开信息endpoint,但不能使用2.5.0。

  • 我想在spring boot应用程序中配置日志记录。我已经配置了logback-spring . XML。logback-spring . XML的示例位于此处,application-dev.properties文件的示例位于此处,当我尝试运行spring boot应用程序时,出现以下错误: 如果我替换

  • 我已经为此挣扎了一段时间了。我想使用restAs0007来测试我的SpringBoot REST应用程序。 虽然看起来容器旋转得很好,但请放心(其他任何东西似乎都有问题。 一直以来我都被拒绝连接。 我的测试类: 现在,对于奇怪的部分,传递并打印它应该传递的内容,但是正在获得连接拒绝异常。 知道这个装置有什么问题吗?

  • 单元测试 单元测试例子放到自己开发的模块下。 如果依赖了第三方服务端(例如Zookeeper),请手动加入 profile。参考 registry-zookeeper 模块代码。 如果依赖了其它模块要集成测试,请放到 test/test-intergrated 模块中。 如果还依赖了第三方服务端(例如Zookeeper),请放到 test-intergrated-3rd 模块中。 性能测试 关闭了