簡體   English   中英

在junit中測試當前的java時間戳

[英]testing current java timestamp in junit

我正在嘗試編寫一個 Junit 來測試具有當前時間戳的對象。 問題是當我第一次創建當前時間戳時,如下所示:

Date date = new Date();
Timestamp timestamp = new Timestamp(date.getTime());

它創建一個時間戳對象,當前時間包括毫秒。 所以當我運行我的測試時,它們永遠不會相等,因為在我創建時間戳對象的時間和測試時間之間有一些時間以毫秒為單位:

x.setTimeToMyMethod(timestamp);
assertEquals(timestamp, x.getTimeFromMyMethod());

我嘗試使用 SimpleDateFormat 但它將時間轉換為字符串,而我的 setter 方法只接受 Timestamp 對象。 無論如何,我可以克服這個問題嗎? 提前致謝!

感謝您的回答,這是我的代碼,希望它能闡明我正在嘗試做的事情:

public class myTest {

    Date date = new Date();

    Timestamp timestamp = new Timestamp(date.getTime());

    myTestingClass testClass = new myTestingClass();

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
    }

    @Before
    public void setUp() throws Exception {


        testClass.setCreateDate(timestamp); 

    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void test() {
        try {


            assertEquals(timestamp, testClass.getCreateDate());

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

當我嘗試運行它時,它給了我以下錯誤:

java.lang.AssertionError:預期:<2015-02-11 09:09:40.038> 但是是:<2015-02-11 09:09:40.04>

我最近有類似的問題。 找到你的問題,但沒有被接受的答案,所以我想現在嘗試回答,因為我設法解決了我的問題。 首先,查看myTestingClass 的代碼,尤其是setCreateDate(timestamp)方法的代碼會很有用。 AssertionError 的原因是使用了兩個不同的 Timestamps 對象。 我的(大)假設是在實例化myTestingClass時創建一個 Timestamp 對象,而在 JUnit 中創建另一個對象。 然后你比較這兩個對象。 如果你有這樣的代碼:

public class myTestingClass {
    // other code ...
    Timestamp timestamp;

    public void setCreateDate(Timestamp timestamp) {
        this.timestamp = timestamp;
    }

    public Timestamp getCreateDate() {
        return timestamp;
    }
}

那么創建 Timestamp 對象的時間和測試的時間之間的差異將無關緊要,因為您使用同一個 Timestamp 對象並且測試將通過。

PS Date 類的大部分已棄用,因此您應該考慮出於相同目的使用新類 - LocalDate / LocalTime / LocalDateTime(Java 8 及更高版本)。 使用 LocalDateTime 創建時間戳將如下所示:

LocalDateTime now = LocalDateTime.now();
Timestamp timestamp = Timestamp.valueOf(now);

您可以在測試套件中創建單個時間戳對象,將其設置為您通過 setter 測試的類,並在您的測試套件中驗證它。 在這種情況下,兩者都是相同的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM