【发布时间】:2022-10-05 00:33:16
【问题描述】:
公共字符串 generateToken(最终字符串 id){
Claims claims = Jwts.claims().setSubject(id);
long nowMillis = System.currentTimeMillis();
long expMillis = nowMillis + tokenValidity;
Date exp = new Date(expMillis);
return Jwts.builder().setClaims(claims).setIssuedAt(new Date(nowMillis)).setExpiration(exp)
.signWith(SignatureAlgorithm.HS512, jwtSecret).compact();
}
现在我想为这种方法编写Junit,我正在尝试如下,但我收到错误
@Test
@Order(1)
public void test_generateToken() throws JwtTokenMalformedException, JwtTokenMissingException {
final String subject_id = "123456789";
final Long tokenValidity = 180000L;
final String jwtSecret = "jwtSecret";
when(Jwts.claims().setSubject(subject_id)).thenReturn(new DefaultClaims()); //** line no: 10
when(Jwts.builder().setClaims(claims).setIssuedAt(new Date(nowMillis)).setExpiration(exp)
.signWith(SignatureAlgorithm.HS512, jwtSecret).compact()).thenReturn(new String());
}
在第 10 行出现错误:org.mockito.exceptions.misusing.MissingMethodInvocationException: when() 需要一个参数,该参数必须是“模拟方法调用”。 例如: when(mock.getArticles()).thenReturn(articles);
此外,可能会出现此错误,因为:
- 您存根以下任一方法:final/private/equals()/hashCode() 方法。 那些方法不能被存根/验证。 不支持在非公共父类上声明的模拟方法。
- 在 when() 中,您不会在模拟上调用方法,而是在其他对象上调用方法。
【问题讨论】:
-
有人可以建议如何为这种方法编写测试用例吗?
标签: spring-boot junit mockito