这就是我的情况,我有两个非常简单的类:
public class B {
public void doSomething(){
System.out.println("doSomething B reached");
}
}
以及:
public class A {
public void doSomething(){
B b = new B();
b.doSomething();
System.out.println("doSomething A reached");
}
}
我想用Mockito测试类A的方法。因此,我想模拟类B的实例,并在实例化类B时将其提供给A。出于隔离原因,我根本不希望达到b.do()。
我知道我可以通过创建以下unittest来实现这种行为:
@RunWith(PowerMockRunner.class)
public class TestA {
@Test
@PrepareForTest(A.class)
public void testDoSomethingOfA() throws Exception{
A a = PowerMockito.spy(new A());
B b = PowerMockito.mock(B.class);
PowerMockito.whenNew(B.class).withNoArguments().thenReturn(b);
a.doSomething();
}
}
这导致输出:
doSomething A reached
所以这工作!然而,我现在的问题是我们使用Jococo插件进行测试覆盖率。Jococo不涵盖使用@准备测试(A. class)语句测试的代码。我的公司重视准确的代码测试覆盖率。
我的问题是:有没有另一种方法可以在不使用@PrepareForTest语句的情况下为A实例化B?
非常感谢!
@Rens Groenveld:集成PowerMockAgent后,您是否对测试类或源代码进行了任何更改?我尝试集成PowerMockAgent并从@PREareForTest中删除了我的主要源代码类,但行为是相同的(创建新实例而不是mock)。
我尝试过jacoco脱机仪器和许多其他解决方案,但都不起作用。
我无法发表您的评论(需要50分),因此添加为答案。
回答我自己的问题,是的,使用代理:https://github.com/jayway/powermock/wiki/PowerMockAgent
问题内容: 通过网络嵌套更新,打印“ abc已更新”,但实际值在Redis数据库中不更新。 注意:-上面的代码在localhost上有效,但更新未在heroku-redistogo上显示。 编辑:-我在本地主机上运行代码,redis连接到Redistogo。使用以下代码:- 设置快速会议:- 我还使用以下代码创建了另一个redisClient: 问题答案: 在Heroku上运行此代码时,您是否在控
我正在尝试从PDF文件中抓取一些数据。我正在使用class.pdf2text.php(在这里找到)(通过一些内部调整),所有工作都很好,但是我有这种非常奇怪的情况。如果我像这样运行代码: 未返回任何内容< code>$bill_date为空。如果我像这样运行代码: 然后打印的所有内容, 是一个包含preg_match结果的数组。正如你可以想象的那样,我无意输出整个内容,我只需要得到preg_mat
问题内容: 我正在尝试让Eclipse v3.5(Galileo)在我的计算机上重新运行-以前我没有任何问题地运行过它,但是现在我仍然遇到此错误: Java运行时环境(JRE)或Java开发工具包(JDK)必须可用才能运行Eclipse。搜索以下位置后未找到Java虚拟机:当前路径中的C:\ eclipse \ jre \ javaw.exe 我刚刚完成了JDK和SDK的全新安装。 我有Windo
我需要在SE环境中使用没有CDI容器的Jersey 2.28(带Jetty)。我的所有设置都在web.xml中: 以下是我使用的依赖项: 我得到的是: 我知道Jersey可以与不同的DI容器一起使用,例如Weld、HK2等,但是否可以不使用DI容器?如果是,那又是怎样做的呢?
我在库伯内特斯连夜运行了一项工作。当我早上检查它时,它已经失败了。通常,我会检查pod日志或事件来确定原因。然而,pod被删除了,没有事件。 下面是输出: 这是作业配置yaml。它有,但是它从来没有重启过。我也没有设置TTL,所以豆荚永远不会被清理。 我如何调试这个?
问题内容: 请给我建议,如何正确设置Jetty。我正在使用最新版本的码头(9.0.6.v20130930)。我命令服务器实现具体的servlet,它不起作用!我已经在Jetty工作了一点,却没有看到类似的东西。 -主类 -Frontend.class -Сonsole 问题答案: 您缺少三件事。 一个上下文 一个会话ID经理 一个会话处理程序(与相关的会话管理器) Main.java MyDump