我看到了一些已注释的字段的问题
@JsonSerialize
当周围的类作为XML从web服务返回时,而不是在单元测试中。当使用“application/json”的Accept头调用服务时,一切正常。当使用“application/xml”的Accept头调用服务时,具有指定序列化程序的字段将被一个空的xml标记存根。
示例代码(从真实问题简化而来)。
public abstract class AbstractEntity {
private String name;
@JsonSerialize(using = MyStampSerializer.class)
private MyStamp created;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public MyStamp getCreated() {
return this.created;
}
public void setCreated(MyStamp created) {
this.created = created;
}
}
@Immutable
@JsonIgnoreProperties(ignoreUnknown = true)
@XmlRootElement(name = "entity")
public class Entity extends AbstractEntity {
public Entity() {
super();
}
}
public class MyStampSerializer extends JsonSerializer<RegistryStamp>
{
@Override
public void serialize(MyStamp stamp, JsonGenerator jgen, SerializerProvider provider)
throws IOException
{
jgen.writeStartObject();
jgen.writeStringField("name", stamp.getName());
jgen.writeNumberField("timestamp", stamp.getTimestamp().getMillis());
jgen.writeEndObject();
}
}
public class EntityXMLTest {
@Test
public void serializeAndDeserializeTest() throws InvalidClassificationException, JsonProcessingException, IOException, InvalidNameException {
Entity entity = buildTestEntity(); // Code not included.
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(new RegistryModule());
String xml = xmlMapper.writeValueAsString(collection);
assertNotNull(xml);
assertThat(xml, is("Hello"));
}
}
因此,在从web服务请求xml的情况下,(不正确的)输出如下所示:
<entity>
<name>theName</name>
<created />
</entity>
但是在单元测试中,(正确的)输出如下所示:
<entity>
<name>theName</name>
<created>
<name>otherName</name>
<timestamp>8647567</timestamp>
</created>
</entity>
JSON在单元测试和web服务中都是预期的。
如果我注释掉序列化程序并重新运行单元测试,则输出如下所示:
<entity>
<created>
<name>test1</name>
<timestamp>
<dayOfYear>2</dayOfYear>
<dayOfMonth>2</dayOfMonth>
<dayOfWeek>5</dayOfWeek>
<era>1</era>
<year>1970</year>
<weekOfWeekyear>1</weekOfWeekyear>
<!-- snip ..... etc -->
</timestamp>
</created>
</entity>
因此,我们显然也需要序列化程序来应用XML,当我在单元测试中直接调用XMLMapper时就会发生这种情况。
有没有办法告诉Jersery/Jackson对XML和JSON都使用序列化程序?有没有办法找出jackson为什么用自定义序列化程序为字段存根XML?还有,有没有办法配置单元测试,使其行为与dropwizard/Jersey/Jackson web服务相同?
最终我让它工作了。重点是:
如果要将@JsonSerialize与jackson和dropwizard一起使用,可能需要使用dropwizard xml扩展包,该包在jackson annotations页面的最底部提到
在此之后,需要进行许多更改才能使XML看起来正确,主要涉及
@JacksonXmlProperty and
@JacksonXmlElementWrapper
最后一个挑战是找到一个与我使用的jackson版本兼容的dropwizard xml版本,并用java 1.7编译,我发现0.9.0-30很有用。
我目前正在与CDI Unit合作一个项目,我遇到了一个奇怪的问题。我试图在一个简单的项目中重现它: 我有一个使用CdiRunner运行的测试类(如下所述:http://jglue.org/cdi-unit-user-guide/我的测试类注入了被测试的单元:UUD。这个类扩展了一个超级类“ParentTestClass”,它目前是无用的。 测试课。爪哇: 正如我提到的,父类是空的。 ParentT
问题内容: 有什么工具可以自动生成 Java 代码的单元测试? 更新: 主要用途是为将要重构的遗留代码快速生成单元测试。自动生成后,无需自动使测试与代码保持同步。 在这里提出了几乎相同的问题,但是答案是.NET而不是Java(Pex是公认的答案): 问题答案: CodePro Analytix有一个JUnit测试生成模块,听起来像它可以完成您想要的。请参阅《用户指南》。 [CoView]是价格合理
我实现了一个新类Holder。目标如下: 三个领域。字段1和2是整数,字段3是布尔值 这给我留下的问题是有50个可能的构造函数选项。5 X 5 X 2。这是不明智的或可扩展的(添加第6种类型,我必须编写一个巨大的更改),所以我使用了构建器模式: 这真的很有效。我有5个用于字段1初始化的生成器方法,5个用于字段2初始化的生成器方法,还有一个用于布尔值。设置字段后,调用build()方法,该方法使用格
我们使用iText读取输入PDF,然后添加消息并保存输出。 有没有一种方法可以读取单元测试中生成的PDF文件,然后检查所提供的文本是否存在于正确的x、y坐标上?
问题内容: 我对大多数代码都有单元测试。但是我无法弄清楚如何为main包中的main()中的某些代码生成单元测试覆盖率。 主要功能非常简单。它基本上是一个选择块。它读取标志,然后调用另一个函数/执行某些操作,或仅在屏幕上打印帮助。但是,如果命令行选项设置不正确,它将退出并显示各种错误代码。因此,需要进行子过程测试。 我尝试了子流程测试技术,但修改了代码,以使其包括覆盖率标志: 这是原始代码: ht
为什么在STS中运行单元测试是有效的,而在bash中运行mvn测试会产生错误。Groovy库位于类路径中。我也很好奇mvn测试与spock测试有何不同。mvn测试不能拿起斯波克测试吗? pom.xml