如何为抛出异常的受保护方法编写测试用例



我正在visualstudio工作并编写Nunit测试用例。在编写测试用例时,我遇到了一个类,它有一个受保护的方法,该方法因此引发了"NotImplementedException"类型的异常。我试着使用Invoke关键字,但Ncover没有覆盖那个部分。我也尝试过使用try-catch,但我的代码审查人员说不要在测试用例中使用try-cach块。所以,朋友,有没有其他方法可以为这种类型的问题编写测试用例。我提到了类和测试用例,请告诉我如何解决它。

类文件:-

public class UpdateMacActivityPriorityTranslator : EntityMapperTranslator<object, CSUpdateMACActivityPriorityResponseType>
    {
        protected override CSUpdateMACActivityPriorityResponseType BusinessToService(IEntityTranslatorService service, object value)
        {
            throw new NotImplementedException();
        }
    }

测试用例:-

public void BusinessToServiceTest()
        {
            var updateMacActivityPriorityTranslator = new UpdateMacActivityPriorityTranslator();
            var service = MockRepository.GenerateStub<IEntityTranslatorService>();
            var value = new object();
            var invokeProtectedBusinessToService = new                      PrivateObject(updateMacActivityPriorityTranslator,new PrivateType(                                                                       typeof(UpdateMacActivityPriorityTranslator)));
            NUnit.Framework.Assert.Throws<NotImplementedException>(
                () =>
                invokeProtectedBusinessToService.Invoke("BusinessToService",
                                                        new object[] { service, value }));
        }

如果包含测试方法BusinessToServiceTestclass(fixture)已经从UpdateMacActivityPriorityTranslator派生(作为基类),我想您可以执行以下操作:

public void BusinessToServiceTest()
{
    var updateMacActivityPriorityTranslator = new UpdateMacActivityPriorityTranslator();
    var service = MockRepository.GenerateStub<IEntityTranslatorService>();
    var value = new object();
    NUnit.Framework.Assert.Throws<NotImplementedException>(
        () => updateMacActivityPriorityTranslator.BusinessToService(service, value)
        );
}

或者你可以只使用this而不是updateMacActivityPriorityTranslator,所以:

public void BusinessToServiceTest()
{
    var service = MockRepository.GenerateStub<IEntityTranslatorService>();
    var value = new object();
    NUnit.Framework.Assert.Throws<NotImplementedException>(
        () => BusinessToService(service, value)
        );
}

在测试夹具中,实现一个从UpdateMacActivityPriorityTranslator继承的私有嵌套类,并通过公共测试方法公开受保护的方法:

private class TestUpdateMacActivityPriorityTranslator : UpdateMacActivityPriorityTranslator
{
    public CSUpdateMACActivityPriorityResponseType TestBusinessToService(IEntityTranslatorService service, object value)
    {
        return this.BusinessToService(service, value);
    }
}

这样,您就可以通过测试类测试受保护的方法,并自然地调用该方法。

var translator = new TestUpdateMacActivityPriorityTranslator();
Assert.Catch<NotImplementedException>(() => translator.TestBusinessToService(null, null));

相关内容

最新更新