下面提到的代码是实现类,需要模拟junit.exe里面的final变量,并设置所需的值。
public class XyzInterceptor
private final int requestLimit;
private final int responseLimit;
LimitHealper limitHealper = LimitHealper.getInstance();
//Constructor
public XyzInterceptor() {
requestLimit = limitHealper.getLimits("fff");
responseLimit = limitHealper.getLimits("fff");
}
public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) {
// Check if rate limit is disabled
if (requestLimit == 0 && responseLimit == 0) {
return true;
}
//logic inside
}
}
测试方法
@Test
public void preHandelWhenLimitIsavailable() {
MockHttpServletRequest req = get("/customResource")
.buildRequest(new MockServletContext());
MockHttpServletResponse resp = new MockHttpServletResponse();
XyzInterceptor crrli = PowerMock.createPartialMock(XyzInterceptor.class, "XyzInterceptor");
EasyMock.expect(limitHealper.getLimits(EasyMock.anyObject(String.class))).andReturn(6000).anyTimes();
EasyMock.replay(limitHealper);
crrli.preHandle(req, resp, "doesn't matter");
Assert.assertEquals(200,resp.getStatus());
}
运行测试时,出现以下错误org.powermock.reflect.exceptions.MethodNotFoundException:在类com. xx. xx. xx. xx. XyzInterceptor的类层次结构中未找到与名称XyzInterceptor匹配的方法。
注意:在类的顶部,我有这些注解@RunWith(PowerMockRunner.class)@PrepareForTest(XyzInterceptor .class)
1条答案
按热度按时间xienkqul1#
我将大力提倡设计改进。不要使用单例和通过构造函数注入。
所以你的测试变成了