我正在使用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 }));
}
答案 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));