当我尝试用PowerMock和Mockito测试一个方法并模拟它的依赖关系时遇到了问题。我尝试将依赖关系方法转换为非静态方法,并使用@mock注释和@injectmocks,但没有任何结果。
下面是正在测试的类和方法:
/* class to be tested */
public class LoginServiceImpl implements LoginService{
/* method to be tested */
@Override
public String createJwt(String subject, String name, String permission, Date datenow) throws java.io.UnsupportedEncodingException{
Date expDate = datenow;
expDate.setTime(datenow.getTime()+(300*1000)); //expiration time = 30 minutes
String token = jwtUtils.generateJwt(subject, expDate, name, permission);
return token;
}
}
这里有一个我想要嘲弄的依赖关系,我很难嘲弄它:
/* Dependency I cannot mock */
public class JwtUtils {
public static String generateJwt(String subject, Date date, String name, String scope) throws java.io.UnsupportedEncodingException{
String jwt = Jwts.builder()
.setSubject(subject)
.setExpiration(date)
.claim("name", name)
.claim("scope", scope)
.signWith(
SignatureAlgorithm.HS256,
"myPersonalSecretKey12345".getBytes("UTF-8")
)
.compact();
return jwt;
}
}
最后,但不是最不重要的是,使用失败的测试方法的测试类。我不得不说,它甚至没有到达assert方法调用,而是在when().ThenResult()处失败。我还必须指定我尝试使用doReturn()和any()作为匹配器,但没有结果。
@RunWith(MockitoJUnitRunner.class) //to run Mockito
@PrepareForTest({JwtUtils.class}) //powerMock annotations tomock classes containing static methods
public class LoginServiceImplTest {
@InjectMocks
LoginServiceImpl loginService; //System under test (SUT)
@Test
public void createJwtTest() throws Exception {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
Date expdate = ft.parse("2040-12-12");
String jwt = JwtUtils.generateJwt("BDAGPP32E08F205K", expdate, "Pippo Baudo", "conduttore");
//HERE IT'S WHERE IT FAILS:
when(JwtUtils.generateJwt("BDAGPP32E08F205K", expdate, "Pippo Baudo", "conduttore")).thenReturn(jwt);
assertThat(loginService.createJwt("BDAGPP32E08F205K", "Pippo Baudo", "conduttore", expdate), is(jwt));
}
}
这里是JUnit和Mockito给我的错误:
进程已完成,退出代码为255
尝试将@runwith(MockitoJunitRunner.Class)
替换为@runwith(PowerMockRunner.Class)
。据我所知,所有使用PowerMock特性的测试都必须使用PowerMockRunner
运行。
我使用Spring Initializr生成了一个Spring Bootweb应用程序,使用嵌入式Tomcat+Thymeleaf模板引擎,并将其打包为一个可执行的JAR文件。 类NexTelsMSSender: . 但这似乎并不是在嘲弄对象属性,因为当我打包应用程序时。我有一个错误:
本节介绍与JUnit Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 JUnit Mock Test I 问题1 - 以下哪项描述正确测试? A - 测试是检查应用程序功能的过程,是否按照要求运行。 B - 测试是单个实体(类或方法)的测试。 C - 以上两者。 D - 以上都
我试图编写一些基本的backingBean测试,但我一直在模仿UserContext和facesContext。 此代码在我尝试测试的代码中: 在另一段代码中,我得到了以下内容: 如何在标准jUnit测试中仅使用mockito来模拟这些?还是必须使用PowerMock之类的工具?
我试图模拟一个公共类,但是当这样做时,Mockito抛出一个异常。 我想嘲弄的班级:https://github.com/scribejava/scribejava/blob/master/scribejava-core/src/main/java/com/github/scribejava/core/builder/ServiceBuilder.java 测试代码: 完整堆栈跟踪:
问题内容: 我在源代码中使用了BufferedWriter对象 我正在尝试在我的测试用例中模拟它,如下所示: 但是,BufferedWriter不会被嘲笑,它总是进入实际的实现中。是因为它不能模拟BufferedWriter,因为它是一个具体的类吗?这是否意味着无法模拟任何java.io类?有没有办法模拟它,或者我做错了什么? 问题答案: ,你可以嘲笑的Java IO类(包括它们的构造,所以未来的