assertEquals 方法的返回值 returns 一个动态值

assertEquals the returned value of method which returns a dynamic value

问题描述- 我正在尝试测试我的登录方法,其中 returns 一个 AuthenticationResponse 的对象,其中包含四个字段 - 用户名、jwt 令牌、刷新令牌和 jwt 令牌的到期时间。

public class **AuthenticationResponse** {
    private String userName;
    private String jwtToken;
    private Instant expiresAt;
    private String refreshToken;
}

我的登录方法(方法待测)在AuthServiceclass.

@Service
public class AuthService
{
    public AuthenticationResponse login(LoginRequest loginRequest)
    {
       //some logic going on...
       Instant expiresAt=Instant.now().plusMillis(900*1000);
        //some logic going on
        return authenticationResponse;

    }
}

我的测试class是这样的->

public class AuthServiceTest
{
    @InjectMocks
    private AuthService authService;
    @Test
    public void loginTest_whenCredentialsAreCorrect()
    {
      ///some logic goes over here...
      AuthenticationResponse authenticationResponse=new AuthenticationResponse();
      authenticationResponse.setJwtToken("jwttest");
      authenticationResponse.setUserName("jack");
      authenticationResponse.setRefreshToken("jwt1");
    authenticationResponse.setExpiresAt(Instant.now().plusMillis(900000));
     assertEquals(authenticationResponse,authService.login(loginRequest));
  
    }
}

我已经在为 expiresAt 字段赋值的方法中编写了我的逻辑,如下所示

Instant expiresAt=Instant.now().plusMillis(900*1000)

现在,我如何在创建 AuthenticationResponse 对象时为该字段 (expiresAt) 分配相同的值以使用方法的返回值断言它。

我无法通过任何方式将此字段的值与方法返回的值相匹配。

我的测试失败并显示此输出:

org.opentest4j.AssertionFailedError:

预期:AuthenticationResponse(userName=jack, jwtToken=jwttest, expiresAt=2020-07-30T13:40:45.828Z, refreshToken=jwt1)

实际:AuthenticationResponse(userName=jack, jwtToken=jwttest, expiresAt=2020-07-30T13:40:45.840Z, refreshToken=jwt1)

有什么办法可以解决这个问题吗??

您可以模拟 expiresAt 值。 请参阅下面 link 以找到执行此操作的各种方法。 https://www.baeldung.com/java-override-system-time