我使用Logback with SLF4J(从log4j迁移),当我运行失败的junit测试时,没有显示测试失败的原因(AssertionFailedError:expect is<>但是<>)
所有其他日志都在运行。
我的回归配置:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %msg%n</pattern>
</encoder>
<filter class="com.jle.athleges.logback.TrashFilter">
<logger>org.springframework</logger>
<level>ERROR</level>
</filter>
</appender>
<appender name="TRASH_FILE_APPENDER"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/logback_trash.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logs/trash.log.%d{yyyy-MM-dd-HH-mm}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework">
<appender-ref ref="TRASH_FILE_APPENDER" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="TRASH_FILE_APPENDER" />
</root>
我的单元测试:
@Test
public void getAllMembers() {
log.debug("Start getAllMember");
long sizeBefore = repository.count();
Member a = new Member();
a.setFirstname("aaa");
a.setLastname("hhh");
a.setId(2L);
Member b = new Member();
b.setFirstname("aaa");
b.setLastname("hhh");
b.setId(1L);
memberService.save(a);
memberService.save(b);
Assert.assertTrue(memberService.getAll().size() == 0);
log.debug("End getAllMember");
}
当您看到我的服务返回超过0个元素并且我的测试失败时。所以,我收到了这条消息:
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
at com.jle.athleges.test.integration.MemberServiceImpTest.getAllMembers(MemberServiceImpTest.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at ...
对于Log4J,语句是java.lang.AssertionError Expected&lt; 0&gt;是&lt; 2&gt;
即使我使用DEBUG而不是ERROR,结果也是一样的。
我不明白为什么部分预期&lt; 0&gt;未显示&lt; 2&gt;
由于
答案 0 :(得分:0)
你声明了一个布尔值:
Assert.assertTrue(memberService.getAll().size() == 0);
框架只知道你想看到一个真正的价值,而不是价值的来源。调用断言时,memberService.getAll().size() == 0
已经被评估过了。通常,使用更具体的断言更好。
你可以从
开始assertEquals(0, memberService.getAll().size())
这会给你Expected <0> was <2>
输出。
但我个人更喜欢Hamcrest风格的断言:
assertThat(memberService.getAll(), is(empty()))
其中is
和empty
都是静态导入:
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.collection.IsEmptyCollection.empty;
这确保了测试代码及其输出都是最可读的。