Jak mogę przetestować klasy abstrakcyjne i metody chronione w nich? Wiem, że niektórzy z was zasugerują, że nie powinienem testować klasy abstrakcyjnej, a raczej testować klasy, które z niej wypływają. Chodzi o to, że nie chcę tego robić. Chcę dokładnie przetestować samą klasę abstrakcyjną. Oto przykładowa klasa:testowanie jednostkowe klas abstrakcyjnych i chronionych metod wewnątrz nich
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;
}
}
Piszę test jednostkowy dla niego. Wiem, że jedną z rzeczy, które mogę zrobić, jest wykorzystanie frameworka do testowania jednostkowego (mam Moq), ale nie mam pojęcia, jak go użyć w tym konkretnym przypadku.
Kudos za kody. Ta odpowiedź jest o wiele lepsza niż odpowiedzi –