Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在JUnit失败原因中替换变量吗?_Java_Unit Testing_Junit - Fatal编程技术网

Java 我可以在JUnit失败原因中替换变量吗?

Java 我可以在JUnit失败原因中替换变量吗?,java,unit-testing,junit,Java,Unit Testing,Junit,在log4j中,我可以这样做: logger.debug("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar()); 我可以在JUnit失败原因中这样做吗 assertTrue("Got {}, but expected {}", StringUtils.equals(bmf.toString(), finalMessage)); 汉克雷斯特游行者是你在这里需要的 assertThat

在log4j中,我可以这样做:

logger.debug("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar());
我可以在JUnit失败原因中这样做吗

assertTrue("Got {}, but expected {}", StringUtils.equals(bmf.toString(), finalMessage));

汉克雷斯特游行者是你在这里需要的

assertThat(bmf.toString(), is(finalMessage));
这将打印失败消息,如

Expected "apples" but got "oranges".

编辑

Hamcrest风格匹配器的力量来自于编写自己的代码的能力

例如,在测试类中,可以添加一个方法:

private Matcher<BMF> stringsTo(final String desired) {
    return new TypeSafeMatcher<BMF>() {
        protected boolean matchesSafely(BMF item) {
            return item.toString().equals(desired);
        }

        public void describeTo(Description description) {
            description.appendText("should stringify as ").appendValue(desired);
        }

        protected describeMismatchSafely(BMF item, Description description) {
             description.appendText(" was ").appendValue(item.toString());
        }
    }
}

您没有测试bmf对象是否等于字符串;您正在测试bmf是否属于类
bmf
,是否非空,并且当对其调用
toString()
时,它会生成
finalMessage
。您可以根据需要使测试变得复杂,并根据需要进行描述性描述。

这里需要的是Hamcrest marchers

assertThat(bmf.toString(), is(finalMessage));
这将打印失败消息,如

Expected "apples" but got "oranges".

编辑

Hamcrest风格匹配器的力量来自于编写自己的代码的能力

例如,在测试类中,可以添加一个方法:

private Matcher<BMF> stringsTo(final String desired) {
    return new TypeSafeMatcher<BMF>() {
        protected boolean matchesSafely(BMF item) {
            return item.toString().equals(desired);
        }

        public void describeTo(Description description) {
            description.appendText("should stringify as ").appendValue(desired);
        }

        protected describeMismatchSafely(BMF item, Description description) {
             description.appendText(" was ").appendValue(item.toString());
        }
    }
}

您没有测试bmf对象是否等于字符串;您正在测试bmf是否属于类
bmf
,是否非空,并且当对其调用
toString()
时,它会生成
finalMessage
。您可以根据需要使测试变得复杂,并根据需要对其进行描述。

这似乎无关紧要。OP所要做的就是使用assertEquals而不是assertTrue,不需要hamcrest。@Nathanhues:我在某种程度上同意你的观点,但对于为什么它不是等效的,有稍微好一点的信息实际上是非常有益的。@Nathanhues奇怪的是,我用了这么多hamcrest,我甚至忘记了assertEquals的存在!Hamcrest matchers的强大功能来自于您自己编写的功能,它可以使用正在测试的参数,并从参数中构造您自己的自定义失败消息。@AJNeufeld:在这里添加这一点很酷。此外,如果OP只想在格式字符串之后指定args,则始终存在string.format。这似乎不相关。OP所要做的就是使用assertEquals而不是assertTrue,不需要hamcrest。@Nathanhues:我在某种程度上同意你的观点,但对于为什么它不是等效的,有稍微好一点的信息实际上是非常有益的。@Nathanhues奇怪的是,我用了这么多hamcrest,我甚至忘记了assertEquals的存在!Hamcrest matchers的强大功能来自于您自己编写的功能,它可以使用正在测试的参数,并从参数中构造您自己的自定义失败消息。@AJNeufeld:在这里添加这一点很酷。此外,如果OP只想在格式字符串之后指定args,则始终存在string.format