使用assertEquals()对控制台println()输出进行判断失败的原因及处理
2017-10-19 22:42
363 查看
最近在学习中遇到个小问题,但很奇怪,通过IntelliJ IDEA的人性化功能帮我发现了原因。
主要想对比一段控制台的输出和预期是否相等。控制台输出的类代码如下,是一个使用println()进行输出的函数:
public class Chicken implements Animal {
@Override
public void say() {
System.out.println("I'm a chicken!");
}
}
测试类如下:
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AnimalConfig.class)
@ActiveProfiles("chicken")
public class Tester {
@Rule
/*SystemOutRule,该规则能够基于控制台的输出编写断言。*/
public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
@Autowired
private Animal animal;
@Test
public void testAnimal() {
assertNotNull(animal);
animal.say();
assertEquals("I'm a chicken!\n", systemOutRule.getLog());
}
}
注意最后那句就是对比的断言了。我在预期输出最后加了个\n,对应的就是println的那个回车了,但运行死活不对!看见IDEA的控制台输出如下:
于是点击“Click to see difference”去see一下difference:
嗯,得亏哥之前做过基于Linux的C开发,改成"\r\n"一试,果然好了!IDEA真心赞!
小小的记录而已……反正也没人看 -_-!!
主要想对比一段控制台的输出和预期是否相等。控制台输出的类代码如下,是一个使用println()进行输出的函数:
public class Chicken implements Animal {
@Override
public void say() {
System.out.println("I'm a chicken!");
}
}
测试类如下:
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AnimalConfig.class)
@ActiveProfiles("chicken")
public class Tester {
@Rule
/*SystemOutRule,该规则能够基于控制台的输出编写断言。*/
public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
@Autowired
private Animal animal;
@Test
public void testAnimal() {
assertNotNull(animal);
animal.say();
assertEquals("I'm a chicken!\n", systemOutRule.getLog());
}
}
注意最后那句就是对比的断言了。我在预期输出最后加了个\n,对应的就是println的那个回车了,但运行死活不对!看见IDEA的控制台输出如下:
于是点击“Click to see difference”去see一下difference:
嗯,得亏哥之前做过基于Linux的C开发,改成"\r\n"一试,果然好了!IDEA真心赞!
小小的记录而已……反正也没人看 -_-!!
相关文章推荐
- 从控制台输入用户名和密码, 然后 判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败. 提示:
- 使用feof()判断文件结束时会多输出内容的原因
- 使用 Java 进行图像处理 - 编码输出高分辨率图像
- [改善Java代码]在equals中使用getClass进行类型判断
- 在equals中使用getClass进行类型判断
- 建议47:在equals中使用getClass进行类型判断
- C语言的字符串转为OC中的字符串,控制台输入用户名和密码,判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败.
- 输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是则输出“NOT” (要求用条件表达式进行判断,不使用if语句)
- 不要使用equals方法对AtomicXXX进行是否相等的判断
- 调用Weka API和使用GUI进行分类时,输出结果相反的原因及解决方法
- 使用 Java 进行图像处理 - 图像编码输出
- 不要使用equals方法对AtomicXXX进行是否相等的判断
- 【失败的尝试】C++中使用string进行switch判断
- MFC中使用控制台进行数据输出
- 从控制台输入用户名和密码, 然后 判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败.
- 数组的创建/查找数组里面的内容/添加数组中元素/使用指定的字符串把数组链接起来/判断数组内是否有指定的数组元素/四种遍历进行输出数组中的元素有哪些
- Junit的使用入门,判断控制台输出是否与预期相同
- 关于使用System.out.println()向控制台输出数据和使用out.println()向页面输出数据效率的问题
- 使用 Java 进行图像处理 - 编码输出高分辨率图像
- PHP在处理ajax返回值的时候,如果使用return如 return $result会失败,echo $result却没问题。解释原因如下: 1.ajax请求从服务器端读取返回值,而且这些返回值必