【发布时间】:2014-08-26 05:55:00
【问题描述】:
我正在尝试对我的班级进行单元测试 这看起来像:-
class A{
private void method1(){
B b=new B();
C c=b.method2();
if(c!=null){
...
...
}
}
}
我想在 B 类中模拟“method2()”。 我知道我们需要一个 B() 的模拟对象,这样每当我们调用它的方法时,就会发生模拟。 这是我尝试过的
A aMock=Easymock.createNiceMock(A.class);
B bMock=Easymock.createNiceMock(B.class);
Powermock.expectNew(B.class).andReturn(bMock).anyTimes();
Easymock.expect(bMock.method2()).andReturn(new C()).anyTimes();
//have done all the replays and verifies
并使用aMock.method1() 调用它,
现在主要问题是 method2 被嘲笑(即 method2() 的主体没有被执行)但我无法接收 C 的对象作为对此的响应。
我的测试场景是:-
我想测试 A 类的 method1() ,它又调用 B 类的 method2() ,但我不希望它执行它的代码(method2() ),因为它是一个 DB 调用,我也需要method2() 返回的 C 对象,所以我使用模拟来实现这一点。
【问题讨论】:
-
那么发生了什么? “我无法接收 C 的对象”是什么意思?
-
预期的行为是模拟应该返回 C 类型的新对象(正如我所写的“.andReturns(new C()))”而不是返回 null
-
对,这个问题根本不清楚 - 请编辑它以使其更清楚。另外,请显示为您的测试指定的任何属性,并告诉我们更多关于您的测试是如何运行的。 (JUnit 4?还有别的吗?)
-
已编辑问题!添加了我的测试场景
-
这并没有向我们显示测试的任何注释,或者您如何运行测试。理想情况下,展示一个简短但完整的问题示例。 (它不需要做任何数据库调用......只需要一个 B 类,它的方法会打印“这不应该被打印”。)
标签: java unit-testing junit4 powermock easymock