Если я правильно понимаю ваш вопрос, вы хотите знать, как контролировать результат getProperty, чтобы вы могли тестировать addIfContains с другими логическими значениями.
Если у вас возникают трудности при написании теста для чего-либо, это часто означает, что вы пытаетесь выполнить слишком много тестов или что существует проблема с дизайном кода.
Возможно, вы сможете сделать этот код более тестируемым, избегая использования наследования. Как вы обнаружили, в модульных тестах часто трудно обрабатывать наследование (происходит много тесных связей), и делегирование обычно в любом случае работает лучше. Я бы рекомендовал внести следующие изменения в дизайн:
namespace TestExample
{
public interface PropertyManager {
public string getProperty(string propertyName);
}
public class XmlPropertyManager: PropertyManager {
public string getProperty(string propertyName) {
//...xml parsing code here
}
}
public class Example {
private PropertyManager propertyManager;
public void runMethod() {
bool addIfContains = (propertyManager.getProperty("AddIfContains") == null || propertyManager.getProperty("AddIfContains") == "True");
//Do something with boolean
}
}
}
Тогда вы можете легко смоделировать PropertyManager.
Если ваш дизайн требует использования абстрактного базового класса (для других функций, кроме getProperty), вы все равно можете использовать делегированный подход:
namespace TestExample
{
public interface PropertyManager {
public string getProperty(string propertyName);
}
public class XmlPropertyManager: PropertyManager {
public string getProperty(string propertyName) {
//...xml parsing code here
}
}
public abstract class AbstractExample
{
protected PropertyManager propertyManager;
//... other important methods
}
public class AbstractInheret: AbstractExample {
public void runMethod() {
bool addIfContains = (propertyManager.getProperty("AddIfContains") == null || propertyManager.getProperty("AddIfContains") == "True");
//Do something with boolean
}
}
}