Junit4学习(一):Juint入门 keeps the bar green to keep the code clean

1、静态引入

    jdk1.5可以引入一个静态类的所有方法。引入以后在类中直接使用静态方法,无须加类名.

    语法:

    import static org.junit.Assert.*;

2、assertThat:hamcrest断言

    assertThat 可以替代其他所有的assert方法,在后续的测试中,建议使用assertThat方法。

    assertThat匹配符:一般匹配符,字符匹配符,数值匹配符,collection匹配符

    一般匹配符:

   allOf:所有的条件都满足才通过,相当于“与”(&&)

   anyOf:所有的条件只要有一个满足即通过,相当于“或”(||)

   anything:无论什么条件,都是通过

   is:前面待测的object等于后面给出的object,则测试通过。

   not:与is相反,前面给出的待测的object不等于后面给出的object,测试才通过。

   字符串相关的匹配符:

   containsString:前面待测的字符串包含后面给出的字符串,则测试通过。。

   endsWith:前面待测的字符串以后面给出的字符串结尾,则测试通过。

   startsWith:前面待测的字符串以后面给出的字符串开头,则测试通过。

   equalTo:前面待测的对象等于后面给出的对象则测试通过。可用于测试数值之间,字符串之间和对象之间是否相等,相当于Ojbect的equals方法

  equalToIgnoringCase:忽略大小写

  equalToIgnoringWhiteSapce:忽略头尾的空格,注意:字符串内部的空格不能忽略。

  数值之间匹配符:

  closeTo:在范围内

  greaterThan:

  lessThan:

  greaterThanOrEqualTo:

  lessThanOrEqualTo:

  Collection匹配符:

  hasEntry:map对象包含给出的key和value

  hasItem:迭代对象包含给出的元素

  hasKey:map对象包含给出的key

  hasValue:map对象包含给出的value

3、failures和errors

    failures表示是测试失败,即受测的方法没有按照设计实现

    errors表示测试代码存在错误,或者系统运行环境出现问题。

4、Annotation

    @Test(timeout,excepted)

    被@Test修饰的方法,在junit中会被自动执行,只能修饰public void 方法。两个参数timeout表示该方法执行的时间,必须在该时间内执行完毕才通过。excepted参数指定抛出的异常,该方法必须抛出指定的异常,才能测试通过。

    @Ignore

    暂时忽略需要测试的方法。

    @Before

    被该注释修饰的方法,在每个测试方法执行之前执行一次。该注释只能修饰public void 方法

    @After

    被该注释修饰的方法,在每个测试方法执行之后执行一次。该注释只能修饰public void 方法

    @BeforeClass

    被该注释修饰的方法,在所有测试方法执行之前执行一次。该注释只能修饰public static void 方法

    @AfterClass

    被该注释修饰的方法,在所有测试方法执行之后执行一次。该注释只能修饰public static void 方法

  

    BeforeClass和AfterClass一般用于申请和释放比较费时的资源的情况下。

 

5、Junit最佳实践

不要用testcase的构造方法初始化Fixture,而用setup()和tearDown()方法

不要依赖或假定测试运行的顺序

避免编写有副作用的TestCase,例如数据提交

继承一个测试类时,记得调用父类的setup方法和tearDown方法

将测试代码和工作代码放在一起,同步编译和更新

测试类和测试方法应该有一致的命名方案

确保测试与时间无关,不要用过期的数据进行测试。

尽可能利用junit提供的fail和assert以及异常处理方法,使代码更加简洁。

不要硬性规定数据文件的路径

每次只测试一个对象

每个单元测试等同于一个@Test方法。(不要把多个测试塞进一个方法中)

在测试方法中一定要包含assert断言,除非在方法中抛出异常

测试任何可能失败的情况

 

6、Junit Test Runner

如果想指定Junit使用特定的test Runner,使用@RunWith注释进行指定。例子如下:

@RunWith(value=org.junit.internal.runners.JUnit38ClassRunner.class)

如果什么也没指定,则使用默认的Runner

7、Test Suit

可以组合多个test classes进一个suit,也可以组合多个test suits进一个suit

示例:

@RunWith(value=org.junit.runners.Suite.class)
@SuiteClasses(value={FolderConfigurationTest.class,
FileConfigurationTest.class})
public class FileSystemConfigurationTestSuite {
}

两个概念:测试对象和领域对象(Test Object 和 Domain Object)

你可能感兴趣的:(JUnit4)