使用Moq进行交互单元测试

时间:2015-01-19 09:53:30

标签: c# unit-testing moq

我有一个测试类

    public class TerminationRequestValidation : ValidatorBase<TerminationRequest>
{
    public TerminationRequestValidation(IIntHR2BLLContext context) : base(context)
    {
    }

    public override ValidationResult ValidateWithoutThrow(TerminationRequest request)
    {
        var result = ValidationResult.Success;

        /* some logic */

        var isHRIAdvanced = Context.Logics.Accessible.HasAccess(request, IntHRSecurityOperationCode.TerminationRequestSetTerminationDateBehindhand);

        if (!isHRIAdvanced && Context.Logics.Termination.IsTerminationDateChanged(request))
        {
            result += CheckTerminationDate(request);                
        }

        return result;
    }

    public virtual ValidationResult CheckTerminationDate(TerminationRequest request)
    {
        var result = ValidationResult.Success;

        /* any validation logic */

        return result;
    }
}

我需要检查'CheckTerminationDate'方法是否已执行

        [TestMethod]
    public void Validate_TerminationDateChangedbyNotAdvanced_TerminationDateCheck()
    {
        var context = FakeContext.Create();
        // first stub
        var accessibleBllStub = new Mock<IAccessibleBLL>(MockBehavior.Loose);

        accessibleBllStub.Setup(z => z.HasAccess(It.IsAny<TerminationRequest>(), It.IsAny<IntHRSecurityOperationCode>()))

            .Returns<TerminationRequest, IntHRSecurityOperationCode>((x, y) => y != IntHRSecurityOperationCode.TerminationRequestSetTerminationDateBehindhand);

        context.StubBLL(z => z.Accessible, accessibleBllStub.Object);
        // second stub
        var terminationBLLStub = new Mock<ITerminationBLL>(MockBehavior.Loose);

        terminationBLLStub.Setup(z => z.IsTerminationDateChanged(It.IsAny<TerminationRequest>())).Returns(true);

        context.StubBLL(z => z.Termination, terminationBLLStub.Object);
        // mock
        var validator = new Mock<TerminationRequestValidation>(MockBehavior.Loose, context.MainContext);
        // act
        validator.Object.ValidateWithoutThrow(termination);
        //assert
        validator.Verify(z => z.CheckTerminationDate(It.IsAny<TerminationRequest>()));
    }

此单元测试过程不起作用。一方面我需要调用真正的'ValidateWithoutThrow'方法,另一方面我需要检查是否执行了stub方法'CheckTerminationDate'。

伙计们,帮我找到最好的解决方案!可能是我需要重新设计测试类以使其更易于测试

0 个答案:

没有答案
相关问题