如何在其中测试抽象类和受保护的方法?我知道有些人会建议我不要测试抽象类,而是测试从它派生的类。事情是,我不想这样做。我想严格测试抽象类本身。以下是示例类:
public interface IF_SystemMessageHandler
{
...
}
public interface IF_SystemMessageSender
{
...
}
public abstract class Component : IF_SystemMessageSender
{
private eVtCompId mComponentId;
private eLayer mLayerId;
private IF_SystemMessageHandler mLogger;
protected Component(eVtCompId inComponentId, eLayer inLayerId, IF_SystemMessageHandler inMessageHandler)
{
mLayerId = inLayerId;
mComponentId = inComponentId;
mLogger = inMessageHandler;
}
protected void SendSystemMessage(ref eSystemMsgLevel inSystemMsgLevel, ref string inSysMsg)
{
mLogger.SendSystemMessage(...);
}
protected void SendSystemMessage(ref eSystemMsgLevel inSystemMsgLevel, ref eTextId inSysMsgID)
{
mLogger.SendSystemMessage(...);
}
public void SetMessageHandler(ref IF_SystemMessageHandler InSystemMessageHandler)
{
mLogger = InSystemMessageHandler;
}
}
我正在为它编写单元测试。我知道我可以做的一件事就是使用单元测试框架(我有Moq),但我不知道如何将它用于这个特定的实例。
答案 0 :(得分:12)
您需要使用继承自您所测试类的“可测试”类。例如,如果您有这样的类:
public class ProtectedStuff
{
protected bool MyProtectedMethod()
{
return true;
}
}
然后在你的单元测试程序集中,继承你的类:
public class TestableProtectedStuff : ProtectedStuff
{
public new bool MyProtectedMethod()
{
return base.MyProtectedMethod();
}
}
这为您提供了一个与原始界面完全相同的类,但现在您可以访问受保护的方法。
答案 1 :(得分:5)
为了测试您的抽象类,您需要实例化它。因此,为了测试目的创建一个继承自Component
(抽象)类的类。
除了使用的接口之外,我对Mock看不太多。