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

时间:2014-09-04 11:21:34

标签: c# testing nunit ncover

我正在使用visual studio并编写Nunit测试用例。 在编写测试用例时,我遇到了一个具有受保护方法的类,并且该方法抛出了一个异常" NotImplementedException"类型。 我尝试使用Invoke关键字,但Ncover不覆盖那部分。 我也尝试使用try catch,但我的代码审查员说不要在测试用例中使用try catch块。 所以,朋友还有其他方法可以为这类问题编写测试用例。 我提到了课程和测试用例,请告诉我如何解决它。

班级档案: -

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 }));
        }

2 个答案:

答案 0 :(得分:1)

如果包含测试方法class的{​​{1}}(fixture)已经派生自(作为基类)BusinessToServiceTest,我想您可以这样做:

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

答案 1 :(得分:0)

在测试夹具中,实现一个继承自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));