辛辛苦苦搬了一天砖,结果发现绝大部分时间是在写Bug,改起来真是痛不欲生,而后突然想起来还有个JUnit测试,方便咱们debug调试java
1. Assertion
断言是一种调试程序的方式,能够理解为高级的异常,其常与测试类并用,使用assert
关键字来实现断言。在JVM中默认是关闭断言的(这样在线上环境就不会启用,而在生产环境本身手动开启方便调试)spring
1.1 开启断言
点击菜单栏的Windows -> preference,在弹窗中选择Installed JRES编辑它,在默认参数中添加 -ea,肯定完成app
1.2 格式与使用
assert <布尔表达式>框架
assert <布尔表达式> :消息单元测试
public static void main(String[] args) { int num = 1; assert (num == 1) : "num不等于1"; }
// 表达式为true,则没有断言发生
public static void main(String[] args) { String str = "Hello World"; assert (str.equals("Hello")) : "str不等于Hello"; }
// 表达式为false,发生断言并由消息提示 Exception in thread "main" java.lang.AssertionError: str不等于Hello at Assert.main(Assert.java:10)
2. JUnit
基于TDD开发,常常要测试代码功能是否可以使用,日常咱们写完一个功能都是在类里的main()方法中来测试的,eg:测试
完成的功能spa
public class Foo { public void add(int a, int b){ System.out.println(a + b); } public void sub(int a, int b){ System.out.println(a - b); } // 用来测试的main()方法 public static void main(String[] args) { Foo f = new Foo(); f.add(1, 1); f.sub(3, 1); } }
可是类中只能有一个main方法且不能把测试代码分离,又没有打印出测试结果和指望结果,并且难于编写一组通用的测试代码,因此咱们须要一个完成的测试框架,这时JUnit出现了,几乎全部的IDE都集成了JUnit,这样咱们就能够直接在IDE中编写并运行JUnit测试.net
2.1 编写测试类
自动生成的目录结构,默认测试类以Test结尾,且在测试的方法上加上注解@Test,这时断言就出现做用了,使用断言能知道报错的具体内容。单元测试能够确保单个方法按照正确预期运行,若是修改了某个方法的代码,只需确保其对应的单元测试经过,便可认为改动正确。此外,测试代码自己就能够做为示例代码,用来演示如何调用该方法,对着要测试方法右键 -> Run AS -> JUnit Testdebug
没有出错调试
出错
能够在左边看到红色的提示框,表明报错,提示框上放Runs表示运行的测试方法/经过的方法,报错的数量,失败次数
2.2 Fixture
进行测试时咱们常常须要准备测试环境,好比须要建立对象,测试以后还需还原环境,若在每一个测试方法内都写上环境内容就重复太多了,这时Fixture就出现了,其注解有:@Before,@After表示在每一个测试方法先后运行
咱们测试环境可用上面两个注解来实现
2.3 @Ignore
若是给测试方法加上@Ignore,则测试中暂时不容许该方法。不建议去掉@Test注解,这样就不知道该方法是个测试方法了
3 补充
3.1 Timeout
@Test(timeout = 1000) //毫秒为单位 public void TimeOut(){ while(true){ System.out.println("循环"); } }
3.2 @Runwith(XXX.class)
JUnit的测试方法都是在Runner(运行器)中执行的。使用@Runwith能够为这个测试类指定一个运行器。JUnit中有一个默认的Runner,因此咱们平时没有使用这个注解,但在Spring中咱们就能够看到@Runwith的身影,这时由于spring整合了JUnit,为其提供了一个包括Spring容器的运行器
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext.xml" }) public class SpringTest { @Autowired UserDao userDao; @Test public void testUserDao() { } }
本文分享 CNBlog - Howlet。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。