JUnit - 使用断言

  • 断言

    所有断言都在 Assert 类中。
    
    public class Assert extends java.lang.Object
    
    这个类提供了一组断言方法,对于编写测试很有用。只记录失败的断言。Assert 类的一些重要方法如下 -
    序号 方法和说明
    1
    void assertEquals(boolean expected, boolean actual)
    检查两个基元/对象是否相等。
    2
    void assertTrue(boolean condition)
    检查条件是否为真。
    3
    void assertFalse(boolean condition)
    检查条件是否为假。
    4
    void assertNotNull(Object object)
    检查对象是否为空。
    5
    void assertNull(Object object)
    检查对象是否为空。
    6
    void assertSame(object1, object2)
    assertSame() 方法测试两个对象引用是否指向同一个对象。
    7
    void assertNotSame(object1, object2)
    assertNotSame() 方法测试两个对象引用是否指向同一个对象。
    8
    void assertArrayEquals(expectedArray, resultArray);
    assertArrayEquals() 方法将测试两个数组是否相等。
    让我们在一个例子中使用上面提到的一些方法。创建一个名为的java类文件TestAssertions.java 在 C:\>JUNIT_WORKSPACE 中。
    
    import org.junit.Test;
    import static org.junit.Assert.*;
    public class TestAssertions {
       @Test
       public void testAssertions() {
          //test data
          String str1 = new String ("abc");
          String str2 = new String ("abc");
          String str3 = null;
          String str4 = "abc";
          String str5 = "abc";
              
          int val1 = 5;
          int val2 = 6;
          String[] expectedArray = {"one", "two", "three"};
          String[] resultArray =  {"one", "two", "three"};
          //Check that two objects are equal
          assertEquals(str1, str2);
          //Check that a condition is true
          assertTrue (val1 < val2);
          //Check that a condition is false
          assertFalse(val1 > val2);
          //Check that an object isn't null
          assertNotNull(str1);
          //Check that an object is null
          assertNull(str3);
          //Check if two object references point to the same object
          assertSame(str4,str5);
          //Check if two object references not point to the same object
          assertNotSame(str1,str3);
          //Check whether two arrays are equal to each other.
          assertArrayEquals(expectedArray, resultArray);
       }
    }
    
    接下来,创建一个名为的java类文件 TestRunner.java 在 C:\>JUNIT_WORKSPACE 中执行测试用例。
    
    import org.junit.runner.JUnitCore;
    import org.junit.runner.Result;
    import org.junit.runner.notification.Failure;
    public class TestRunner2 {
       public static void main(String[] args) {
          Result result = JUnitCore.runClasses(TestAssertions.class);
              
          for (Failure failure : result.getFailures()) {
             System.out.println(failure.toString());
          }
              
          System.out.println(result.wasSuccessful());
       }
    } 
    
    使用 javac 编译测试用例和测试运行器类。
    
    C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java
    
    现在运行 Test Runner,它将运行在提供的测试用例类中定义的测试用例。
    
    C:\JUNIT_WORKSPACE>java TestRunner
    
    验证输出。
    
    true
    
  • 注解

    注释就像元标记,您可以将其添加到代码中,并将它们应用于方法或类中。JUnit 中的这些注释提供了有关测试方法的以下信息 -
    • 哪些方法将在测试方法之前和之后运行。
    • 哪些方法在所有方法之前和之后运行,以及。
    • 在执行过程中将忽略哪些方法或类。
    下表提供了 JUnit 中的注释列表及其含义 -
    序号 注释和描述
    1
    @Test
    Test 注释告诉 JUnit,它所附加的 public void 方法可以作为测试用例运行。
    2
    @Before
    几个测试需要创建类似的对象才能运行。使用 @Before 注释 public void 方法会导致该方法在每个 Test 方法之前运行。
    3
    @After
    如果在 Before 方法中分配外部资源,则需要在测试运行后释放它们。使用 @After 注释 public void 方法会导致该方法在 Test 方法之后运行。
    4
    @BeforeClass
    使用 @BeforeClass 注释公共静态 void 方法会使其在类中的任何测试方法之前运行一次。
    5
    @AfterClass
    这将在所有测试完成后执行该方法。这可用于执行清理活动。
    6
    @Ignore
    Ignore 注释用于忽略测试并且不会执行该测试。
    创建一个名为的java类文件 JunitAnnotation.java 在 C:\>JUNIT_WORKSPACE 中测试注释。
    
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Ignore;
    import org.junit.Test;
    public class JunitAnnotation {
         
       //execute before class
       @BeforeClass
       public static void beforeClass() {
          System.out.println("in before class");
       }
       //execute after class
       @AfterClass
       public static void  afterClass() {
          System.out.println("in after class");
       }
       //execute before test
       @Before
       public void before() {
          System.out.println("in before");
       }
         
       //execute after test
       @After
       public void after() {
          System.out.println("in after");
       }
         
       //test case
       @Test
       public void test() {
          System.out.println("in test");
       }
         
       //test case ignore and will not execute
       @Ignore
       public void ignoreTest() {
          System.out.println("in ignore test");
       }
    }
    
    接下来,创建一个名为的java类文件 TestRunner.java 在 C:\>JUNIT_WORKSPACE 中执行注释。
    
    import org.junit.runner.JUnitCore;
    import org.junit.runner.Result;
    import org.junit.runner.notification.Failure;
    public class TestRunner {
       public static void main(String[] args) {
          Result result = JUnitCore.runClasses(JunitAnnotation.class);
              
          for (Failure failure : result.getFailures()) {
             System.out.println(failure.toString());
          }
              
          System.out.println(result.wasSuccessful());
       }
    } 
    
    使用 javac 编译测试用例和测试运行器类。
    
    C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java
    
    现在运行 Test Runner,它将运行在提供的测试用例类中定义的测试用例。
    
    C:\JUNIT_WORKSPACE>java TestRunner
    
    验证输出。
    
    in before class
    in before
    in test
    in after
    in after class
    true