JUnit 的 hamcrest 库是否有一个 API 来测试 public 变量而不是属性

Does the hamcrest library for JUnit has an API to test public variables rather than properties

我正在尝试测试 public 具有特定值的变量。问题是我正在测试 public 变量,而不是 JavaBean。

Assert.assertThat(clientMapper.entries, Matchers.<ClientMapper.MapperEntry>hasItem(
    Matchers.allOf(
            Matchers.hasProperty("from", Matchers.is("/v1")),
            Matchers.hasProperty("to", Matchers.is("/v2"))
    )
));

而我正在测试的 class 是

public static class MapperEntry {
    public String from;
    public String to;
}

测试失败是因为没有找到JavaBean属性fromto,可以理解,但是如何测试public字段呢?

更新:我正在尝试为 java 7

寻找解决方案

我不这么认为。 Public 字段在 Java 中很少见,这可能就是没有字段的原因。您必须自己编写 Matcher 来处理这个问题。

如果 class 有适当的 toString() 实现,那么您可以使用字符串或正则表达式匹配器。

NitorCreations' matchers library 具有以下字段的匹配器:

Assert.assertThat(clientMapper.entries, Matchers<ClientMapper.MapperEntry>hasItem(
  Matchers.allOf(
        com.nitorcreations.Matchers.hasField("from", Matchers.is("/v1")),
        com.nitorcreations.Matchers.hasField("to", Matchers.is("/v2"))
)));