gpt4 book ai didi

java - cucumber 没有将特征文件中数据表中的日期字符串序列化到我的 pojo 中的 LocalDate 字段

转载 作者:行者123 更新时间:2023-11-29 07:27:16 25 4
gpt4 key购买 nike

我试图弄清楚如何在我的步骤定义中从我的 cucumber 特征文件中解析日期字段。

class Person{ 
String name
LocalDate dob
}

scenario: do something with people
Given list of people:
|name|dob|
| john| 20-09-2001|

@Given("^list of people:")
public void doSomething(List<Person> people) {

}

请注意,我无权访问 Person 类,我确定我必须编写自己的转换器或注册某个库中某人编写的转换器,在搜索之后我能看到的唯一选项是将它们更改为 pojo java.time.LocalDate 字段上的 @Transform。

我目前遇到以下异常

cucumber.runtime.CucumberException:              cucumber.deps.com.thoughtworks.xstream.converters.ConversionException: Cannot deserialize object with new readObject()/writeObject() methods
---- Debugging information ----
class : java.time.LocalDate
required-type : java.time.LocalDate
converter-type : cucumber.deps.com.thoughtworks.xstream.converters.reflection.SerializableConverter
path : /list/com.pkg.Person/dob

我尝试将日期格式更改为 yyyy-MM-dd,这通常有效,但这次无效。如果能提供有关如何设置和注册自定义转换器的任何指示,我将不胜感激

我的 cucumber 依赖项如下,如果需要,我可以将它们更改为更新版本,如果有任何不同的话。

    <dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>2.4.0</version>
</dependency>

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>2.4.0</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>2.4.0</version>
</dependency>

最佳答案

Cucumber 不支持自动转换新的 java 日期时间类。但它确实支持转换到旧的 util Date 类,这是没有用的,因为您没有对数据对象的写入权限。

为此,您需要在测试运行器上使用 @XStreamConverters 注释。这会将自定义 xstream 转换器添加到 Cucumber 中开箱即用的转换器中。

@RunWith(Cucumber.class)
@CucumberOptions(plugin = { ""}, tags = { "" }, glue = "stepdefs",
features = "" ) --> use your own values
@XStreamConverters(@XStreamConverter(LocalDateCon.class))
public class RunSampleTest {

现在转换器类将字符串解析为 LocalDate 并创建数据对象集合。这将支持像“15-05-2016”这样的日期。只需根据您的日期格式更改 DEFAULT_DATE_PATTERN

public class LocalDateCon implements Converter{

public boolean canConvert(Class type) {
//return type.equals(LocalDate.class);
return LocalDate.class.isAssignableFrom(type);
}

private static final String DEFAULT_DATE_PATTERN = "dd-MM-yyyy";
private static final DateTimeFormatter DEFAULT_DATE_FORMATTER = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN);

public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
LocalDate date = (LocalDate) value;
String result = date.format(DEFAULT_DATE_FORMATTER);
writer.setValue(result);
}

public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
LocalDate result = LocalDate.parse(reader.getValue(), DEFAULT_DATE_FORMATTER);
return result;
}

}

此外,您将无法干净利落地使用 @Transform 注释,因为它仅适用于单个值而不适用于集合。我使用得很干净,因为需要在困惑的转换器代码中创建对象。

关于java - cucumber 没有将特征文件中数据表中的日期字符串序列化到我的 pojo 中的 LocalDate 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com