【发布时间】:2019-12-11 15:16:10
【问题描述】:
我创建了一个下面给出的 JWTCreateImpl 类,以使用 generateToken() 方法生成一个 jwt 令牌,并使用 loginUser() 方法响应一个 jwt 字符串。 loginUser() 方法将电子邮件和密码作为来自前端的参数。此电子邮件与数据库中存在的电子邮件进行比较,如果电子邮件不存在,则错误响应将变为“电子邮件不存在”,同样密码不匹配。最后,如果特定 id 存在电子邮件和密码,则从数据库中提取结果并仅传递用户的 uuid 以生成令牌,响应将是 jwt 字符串。我想使用 Junit4 对这个类进行单元测试,如何使用 Junit4 编写测试用例?
JWTCreateImpl 类实现 JWTCreate 接口,其中包含抽象方法 loginUser(UserInfoJWT userInfoJWT) 和 generateToken(UUID uuid) 以及一个用于 generateToken() 方法的 String JWT_TOKEN_KEY,主要用于 HMAC256 算法。 UserInfoJWT 是一个 POJO 类,其中包含用户的电子邮件和密码。
ResponseJWT 是一个 POJO 类,包含 UserToken 和 errorResponse。
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.knoldus.magad.jwt.api.JWTCreate;
import com.knoldus.magad.jwt.model.ResponseJWT;
import com.knoldus.magad.jwt.model.UserInfoJWT;
import com.knoldus.magad.dao.model.UserInfo;
import com.knoldus.magad.user.api.UserInfoProcessingAPI;
import org.apache.log4j.Logger;
import java.io.UnsupportedEncodingException;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public class JWTCreateImpl implements JWTCreate {
private static final Logger LOGGER = Logger.getLogger(JWTCreateImpl.class);
private UserInfo existingUser;
private ResponseJWT response;
private UserInfoProcessingAPI userInfoProcessingAPI;
private static final String NO_USER_EMAIL = "Email doesn't exists..";
private static final String LOGIN_UNSUCCESSFUL = "Wrong Password";
@Override
public CompletableFuture<String>loginUser(final UserInfoJWT userInfoJWT) {
return userInfoProcessingAPI.getUserInfo(userInfoJWT.getUserEmail()).thenApply(result -> {
existingUser = result.orElse(null);
if (existingUser == null) {
response = ResponseJWT.builder().errorResponse(NO_USER_EMAIL).build();
} else {
final String dataBasePassword = existingUser.getUserPassword();
if (userInfoJWT.getUserPassword().equals(dataBasePassword)) {
response = ResponseJWT.builder().userToken(generateToken(existingUser.getUuid())).build();
} else {
response = ResponseJWT.builder().errorResponse(LOGIN_UNSUCCESSFUL).build();
}
}
return response.toString();
});
}
@Override
public String generateToken(final UUID uuid) {
try {
final Algorithm algorithm = Algorithm.HMAC256(JWT_TOKEN_KEY);
final Date expirationDate = Date.from(ZonedDateTime.now().plusHours(24).toInstant());
final Date issuedAt = Date.from(ZonedDateTime.now().toInstant());
final String id = String.valueOf(uuid);
final String issuer = "MagADAuth";
return JWT.create()
.withIssuedAt(issuedAt) // Issue date.
.withExpiresAt(expirationDate) // Expiration date.
.withClaim("userId", id)
.withIssuer(issuer) // Issuer of the token.
.sign(algorithm); // And the signing algorithm.
} catch (UnsupportedEncodingException | JWTCreationException e) {
LOGGER.error(e.getMessage(), e);
}
return null;
}
【问题讨论】: