2013-05-22 68 views
7

Sự khác nhau giữa hai khối mã là gì?Sự khác biệt giữa đối tượng khẳng định là gì = null và Assert.assertNotNull (đối tượng)?

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    Assert.assertNotNull(object); 
} 

@Test 
public void getObjectTest() throws Exception { 
    Object object; 
    //Some code 
    assert object!=null; 
} 

Tôi hiểu rằng Assert.AssertNotNull là lời kêu gọi hàm từ TestNG và assert là một từ khóa của Java (giới thiệu trong Java 1.4). Có sự khác biệt nào khác trong hai điều này không? ví dụ. hoạt động, hiệu suất, v.v.

Trả lời

7

Trường hợp đầu tiên sử dụng lớp Assert từ khung kiểm tra của bạn và là cách phù hợp để đi, vì TestNG sẽ báo cáo lỗi theo cách thông minh.

Bạn cũng có thể thêm thông điệp của riêng bạn để kiểm tra:

Assert.assertNotNull(object, "This object should not be null"); 

Trường hợp thứ hai sử dụng từ khóa assert - nó sẽ cung cấp cho bạn một sự thất bại nhưng stack trace có thể hoặc không thể hiểu được trong nháy mắt. Bạn cũng cần lưu ý rằng các xác nhận có thể KHÔNG được bật.

3

Vâng, đó là: từ khóa khẳng định cần phải được kích hoạt bằng cách sử dụng cờ-ea, như

java -ea MyClass 

Các khẳng định có thể do được bật và tắt mà không cần bất kỳ thay đổi mã.

Lớp Assert sẽ luôn hoạt động thay thế. Vì vậy, nếu bạn đang thử nghiệm, hãy sử dụng lớp Assert, không bao giờ là từ khóa khẳng định. Điều này có thể cung cấp cho bạn ý tưởng tất cả các bài kiểm tra của bạn đang trôi qua, và trong khi thực tế họ không khẳng định bất cứ điều gì. Trong hơn 10 năm mã hóa của tôi, tôi chưa bao giờ thấy bất cứ ai cho phép xác nhận ngoại trừ Jetbrains, vì vậy hãy sử dụng Assert để thay thế. Hoặc tốt hơn, sử dụng Hamcrest.

+0

Điều này đang được chạy bên trong nền tảng TestNG. TestNG cho phép các câu lệnh khẳng định. Tôi không chắc bạn đang lấy thông tin ở đâu. –

+0

Bạn nói đúng, tôi đã cập nhật câu trả lời của mình để sửa lỗi này. Cảm ơn! –

0

Sự khác biệt về cơ bản là thiếu từ khóa assert. Đây là nguồn từ testng:

static public void assertNotNull(Object object) { 
    assertNotNull(object, null); 
} 

static public void assertNotNull(Object object, String message) { 
    assertTrue(object != null, message); 
} 

Xin lưu ý rằng OP đã sử dụng thẻ testng!

Đây không phải là JUnit's Assert!

Một số thông tin về assert từ khóa của java: assert

2

Nói về Hiệu suất:

assert object!=null; là một tuyên bố java đơn nhưng Assert.assertNotNull(object) sẽ cho kết quả trong việc kêu gọi của Nhiều chức năng của TestNG, vì vậy w.r.t. hiệu suất assert object!=null; sẽ tốt hơn một chút.

+0

Bạn có ý nghĩa gì hơn một chút? Bạn có thể vui lòng cung cấp một số con số không. – Senstive

+0

Bởi một chút tôi có nghĩa là 'đối tượng khẳng định! = Null;' sẽ có ít thời gian hơn nhưng sự khác biệt sẽ bằng mili giây – Raheel

Các vấn đề liên quan