【问题标题】:Spring MVC testing conversion service when using ConverterFactorySpring MVC在使用ConverterFactory时测试转换服务
【发布时间】:2016-04-03 03:26:19
【问题描述】:

最初,我的项目中几乎每个实体类都有一个转换器。我决定放弃所有这些转换器并创建一个 ConverterFactory 来完成所有转换。

@Service("dataConverterFactory")
public class DataConverterFactory implements ConverterFactory<String, CommonEntity> {

    private static final Logger logger = LoggerFactory.getLogger(DataConverterFactory.class);

    private final EntityManager em;

    @Autowired
    public DataConverterFactory(EntityManager em) {
        this.em = em;
    }

    @Override
    public <T extends CommonEntity> Converter<String, T> getConverter(Class<T> targetType) {
        return new GenericConverter(targetType);
    }

    private final class GenericConverter<T extends CommonEntity> implements Converter<String, T> {

        private final Class<T> targetType;

        public GenericConverter(Class<T> targetType) {
            this.targetType = targetType;
        }

        @Override
        public T convert(String text) {
            if (text != null && !text.isEmpty() && !text.equalsIgnoreCase("-1")) {//Ignore - to be determined later
                try {
                    return (T) em.find(targetType, Integer.valueOf(text.trim()));
                } catch (Exception e) {
                    logger.error(e.getMessage(), e);
                }
            }
            return null;
        }

    }

}

这工作正常,但我的测试在需要转换时失败。这是我的测试 xml 配置文件中的一个 sn-p

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="dataConverterFactory"/>
            </set>
        </property>
    </bean>
    <bean id="dataConverterFactory" class="com.xyz.converter.DataConverterFactory"/>

样本测试

  mockMvc.perform(fileUpload("/complaint/new")
            .file(file)
            .param("customer", "1")
    )

在上述测试中,我尝试提交投诉,但由于客户将为空,因此失败。

参数 customer 应转换为扩展 CommonEntity 的类 Customer。

public class Complaint extends CommonEntity {

    @NotNull
    @ManyToOne
    @JoinColumn(name = "customer_id", updatable = false)
    private Customer customer;

}

模拟/设置转换服务如何在我的测试中工作?

【问题讨论】:

    标签: spring-mvc mockito spring-mvc-test


    【解决方案1】:
    私有 MockMvc mockMvc; @前 公共无效设置(){ YourController 转换器控制器 = new YourController(); FormattingConversionService cs = new FormattingConversionService(); cs.addConverter(new YourConverter());/////这里 mockMvc = MockMvcBuilders.standaloneSetup(converterController) .setConversionService(cs)/////这里 。建造(); }

    【讨论】:

    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2011-07-18
    • 2016-10-23
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多