easymock抛出assertionError,并且在验证时expectaction失败

时间:2014-07-18 07:20:10

标签: java easymock

我有这种方法需要测试。

protected RestResponseStatus validate(INotificationValidator... validations) {
    RestResponseStatus resp = null;
    for (INotificationValidator validation : validations) {
        if (!validation.isValid()) { // <- need to test this
            resp = validation.createErrorResponseStatus();
            break;
        }
    }
    return resp;
}

为了测试它,我创建了类并使用此方法用类扩展它并创建测试方法

@Test
public void nonValidBranchTest() {
    ParameterValidator validator = createMock(ParameterValidator.class);
    validator.isValid();
    expectLastCall().andReturn(false);
    replay(validator);

    this.validate(new ParameterValidator(TEST_STRING));
    verify(validator);

}

但是当我尝试进行测试时 - 我发现了错误

java.lang.AssertionError: 
   Expectation failure on verify:
     ParameterValidator.isValid(): expected: 1, actual: 0

2 个答案:

答案 0 :(得分:1)

为什么不将验证器模拟传递给validate方法?

ParameterValidator validator = createMock(ParameterValidator.class);
validator.isValid();
expectLastCall().andReturn(false);
replay(validator);

this.validate(validator);
verify(validator);

如果你创建一个新的ParameterValidator实例,那么模拟当然永远不会被调用。

据我所知......你想测试validate方法是否在验证器上调用isValid,如果它返回false,则调用validation.createErrorResponseStatus

因此,您还应记录该行为

RestResponseStatus expectedRespStatus = createMock(RestResponseStatus.class);
ParameterValidator validator = createMock(ParameterValidator.class);
validator.isValid();
expectLastCall().andReturn(false);
validator.createErrorResponseStatus().andReturn(expectedRespStatus);
expectLastCall();
replay(validator);
replay(expectedRespStatus);

RestResponseStatus respStatus = this.validate(validator);
assertSame(expectedRespStatus, respStatus);
verify(validator);

答案 1 :(得分:0)

您应该在测试类中创建要测试的对象实例,而不是扩展它。测试类通常不会扩展被测试的类,而是镜像src \ main \ test下的包结构,以便您可以访问受保护的方法。

有0个电话的原因是您拨打的电话为this.validate MyClassTest,而不是MyClass