zoukankan      html  css  js  c++  java
  • Java单元测试学习

    单元测试的好处

    1. 让你写出更好的代码:职业高内聚、低耦合而且接口设计合理的代码才易于测试;

    2. 让你在修改代码时更有信心。

    JUnit4 注解

    • @Test (expected = Exception.class) 表示预期会抛出Exception.class 的异常
    • @Ignore 含义是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore注解删去,就可以进行正常的测试。
    • @Test(timeout=100) 表示预期方法执行不会超过 100 毫秒,控制死循环
    • @Before 表示该方法在每一个测试方法之前运行,可以使用该方法进行初始化之类的操作
    • @After 表示该方法在每一个测试方法之后运行,可以使用该方法进行释放资源,回收内存之类的操
    • @BeforeClass 表示该方法只执行一次,并且在所有方法之前执行。一般可以使用该方法进行数据库连接操作,注意该注解运用在静态方法。
    • @AfterClass 表示该方法只执行一次,并且在所有方法之后执行。一般可以使用该方法进行数据库连接关闭操作,注意该注解运用在静态方法。

    TestSuite

    如果有多个测试类, 可以合并成一个测试套件进行测试, 运行一个 Test Suite, 那么就会运行在这个 Test Suite 中的所用的测试.
    例如:

    import org.junit.runner.RunWith;  
    import org.junit.runners.Suite;  
    import org.junit.runners.Suite.SuiteClasses;  
      
    @RunWith(Suite.class)  
    @SuiteClasses({JUnitTest1.class, JUnitTest2.class})  
    public class AllTests {
    
    }

    这里定义了一个 Test Suite,这个Test Suite包含了两个测试类:JUnitTest1和JUnitTest2,因此运行这个Test Suite时,就会自动运行这两个测试类了。

    IDE中自动生成测试类

    一般来说IDE都提供了自动生成测试类的功能,当然了,里面的具体测试代码还是要自己写的。

    比如在IDEA中就是,在 HelloWorld 类名上按下 alt + enter 后, 就可以自动生成测试类了。

    使用断言而不是Print语句

    许多新手开发人员习惯于在每行代码之后编写System.out.println语句来验证代码是否正确执行。这种做法常常扩展到单元测试,从而导致测试代码变得杂乱。除了混乱,这需要开发人员手动干预去验证控制台上打印的输出,以检查测试是否成功运行。更好的方法是使用自动指示测试结果的断言。

    Junit3和Junit4都提供了一个Assert类(虽然package不同,但是大致差不多)。Assert类中定义了很多静态方法来进行断言。列表如下:

    assertTrue(String message, boolean condition) 要求condition == true
    assertFalse(String message, boolean condition) 要求condition == false
    fail(String message) 必然失败,同样要求代码不可达
    assertEquals(String message, XXX expected,XXX actual) 要求expected.equals(actual)
    assertArrayEquals(String message, XXX[] expecteds,XXX [] actuals) 要求expected.equalsArray(actual)
    assertNotNull(String message, Object object) 要求object!=null
    assertNull(String message, Object object) 要求object==null
    assertSame(String message, Object expected, Object actual) 要求expected == actual
    assertNotSame(String message, Object unexpected,Object actual) 要求expected != actual
    assertThat(String reason, T actual, Matcher matcher) 要求matcher.matches(actual) == true

    测试负面情景和边缘情况

    通常,开发人员会花费大量的时间和精力编写测试用例,以确保应用程序按预期工作。然而,测试负面测试用例也很重要。负面测试用例指的是测试系统是否可以处理无效数据的测试用例。例如,考虑一个简单的函数,它能读取长度为8的字母数字值,由用户键入。除了字母数字值,应测试以下负面测试用例:

    • 用户指定非字母数字值,如特殊字符。
    • 用户指定空值。
    • 用户指定大于或小于8个字符的值。

    类似地,边界测试用例测试系统是否适用于极端值。例如,如果用户希望输入从1到100的数字值,则1和100是边界值,对这些值进行测试系统是非常重要的。

  • 相关阅读:
    继承
    面向对象_封装练习
    ajax分页与组合查询配合使用
    Linq的分页与组合查询的配合使用
    发送邮件和数据导出
    GridView的使用
    母版页的使用
    DIV+CSS命名规范
    Ajax基础
    jQuery动画效果
  • 原文地址:https://www.cnblogs.com/tuhooo/p/8709300.html
Copyright © 2011-2022 走看看