我正在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 }));
}
如果包含测试方法BusinessToServiceTest
的class
(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));