Junit与新日期()

A.K*_*han 7 junit easymock date

当我有以下方法时,junit测试会是什么:

@Override
public void saveLastSuccesfullLogin(final User user) {
    gebruiker.setLastLogin(new Date());
    storeUser(user);
}
Run Code Online (Sandbox Code Playgroud)

submethode storeUser:

@Override
public void storeUser(final User user) {
    EntityManager em = emf.createEntityManager();

    em.getTransaction().begin();
    em.merge(user);
    em.getTransaction().commit();

    em.close();
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是日期,为实体用户设置然后存储.我正在使用junit和easymock.

Vin*_*d R 4

尝试将 new Date() 拉入具有默认访问说明符的方法中,如下所示

@Override
public void saveLastSuccesfullLogin(final User user) {
    gebruiker.setLastLogin(getDate());
    storeUser(user);
}
Date getDate() {
    return new Date();
}
Run Code Online (Sandbox Code Playgroud)

在您的测试类中,使用模拟或存根日期覆盖该类,如下所示。

<ClassUnderTest> classUnderTest = new <ClassUnderTest> () {
  @Override 
  Date getDate() {
    return mockDate;
  } 
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以轻松断言日期值,因为它将被删除。

  • 我不会使用匿名类覆盖,而是使用[Mockito的部分模拟](http://blog.javabien.net/2009/06/21/mockitos-partial-mocks-testing-real-objects-just-got-easier/) 。所以它会是 ClassUnderTest t =间谍(new ClassUnderTest()); when(t.getDate()).thenReturn(DATE_MOCK); (2认同)