java – PowerMock测试通过然后失败
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – PowerMock测试通过然后失败,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2804字,纯文字阅读大概需要5分钟。
内容图文
![java – PowerMock测试通过然后失败](/upload/InfoBanner/zyjiaocheng/805/7eeb20434e3148d09ae1c922c82afe83.jpg)
为什么我的单元测试在独立运行时通过,但在运行多个测试时失败?
当我执行单个单元测试时,我的测试将成功模拟并返回预期结果.但是,当我运行所有单元测试时,我之前通过的测试将失败.
一次试运行
shouldDoThisAgain() – Pass
多次测试运行
shouldDoThis() – Pass
shouldDoThisAgain() – Fail
shouldDoThisAgainAgain() – Fail
我的测试:
@PrepareForTest({OtherMethods.class})
@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
public class DbTest {
@Test
public void shouldDoThis() throws Exception() {
Dal dalMock = mock(Dal.class)
PowerMockito.whenNew(Dal.class).withAnyArguments().thenReturn(dalMock)
List<Result> results = new ArrayList<Result>();
results.add(new Result(1,2,3));
when(dalMock.getResults()).thenReturn(results)
assertTrue(Wrapper.MY_WRAPPER.run());
}
@Test
public void shouldDoThisAgain() throws Exception() {
Dal dalMock = mock(Dal.class)
PowerMockito.whenNew(Dal.class).withAnyArguments().thenReturn(dalMock)
List<Result> results = new ArrayList<Result>();
results.add(new Result(2,3,4));
when(dalMock.getResults()).thenReturn(results)
assertTrue(Wrapper.MY_WRAPPER.run());
}
@Test
public void shouldDoThisAgainAgain() throws Exception() {
Dal dalMock = mock(Dal.class)
PowerMockito.whenNew(Dal.class).withAnyArguments().thenReturn(dalMock)
List<Result> results = new ArrayList<Result>();
results.add(new Result(6,5,3));
when(dalMock.getResults()).thenReturn(results)
assertTrue(Wrapper.MY_WRAPPER.run());
}
}
我的课程:
public class Wrapper {
// not Runnable
public static final MyWrapper MY_WRAPPER = new MyWrapper(...){
@Override
public boolean run() {
// returns empty list when the test is alone
// returns 'results' variable when ran with other tests alone
List<Result> results = OtherMethods.getDal().getResults();
return !results.isEmpty()
}
};
}
public class OtherMethods {
private static final Logger LOGGER = LogManager.getLogger(OtherMethods.class);
public static Dal dal;
static Dal getDal() {
if (dal == null) {
try {
dal = new Dal();
} catch (Exception e) {
LOGGER.fatal("DB Connection could not be created for Geonames");
LOGGER.fatal(e);
}
}
return dal;
}
}
解决方法:
我找到了我们项目的解决方案.我写了一个调用Android内部静态Log方法的Logger类.我的一些测试没有直接测试Log类.当我忽略所有这些时,基于powermockito的测试变为绿色.但是当这些其他测试运行时,基于powermockito的测试将会失败.有时.
这种方法会失败(片状):
@RunWith(PowerMockRunner.class)
@PrepareForTest({Log.class}) // WARNING: HERE BE DRAGONS!
public class MyTest {
@Test
public void testMethodThatDoesNotUseStatics() {
// ...
}
@Test
public void usesStatics() {
// ...
}
}
然后我发现你可以用@PrepareForTest注释每个测试方法,如下所示:
@RunWith(PowerMockRunner.class)
public class MyTest {
@Test
public void testMethodThatDoesNotUseStatics() {
// ...
}
@Test
@PrepareForTest({Log.class}) // that's the way :)
public void usesStatics() {
// ...
}
}
现在测试再次变为绿色.是的非片状测试!
内容总结
以上是互联网集市为您收集整理的java – PowerMock测试通过然后失败全部内容,希望文章能够帮你解决java – PowerMock测试通过然后失败所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。