В вашем классе есть два закрытых служебных метода, которые инкапсулируют некоторое полезное поведение, и открытый метод, который вы тестируете, должен использовать это поведение. Однако, когда вы тестируете, вы не хотите нормального поведения от этих методов, вы хотите заменить тестовое поведение. То, что у вас есть, это классический случай зависимости. При тестировании зависимости внутри класса могут быть проблематичными.
Таким образом, решение такое же, как и для внешней зависимости: используйте внедрение зависимости того или иного типа, чтобы отделить метод, который вы хотите проверить, от частных методов, которые реализуют поведение.
Например, два частных делегата могут быть объявлены для представления поведения:
private Action Behavior1;
private Action Behavior2;
В конструкторе класса нормальное поведение реализовано так:
public Foo (...)
{
Behavior1 = privateMethod1;
Behavior2 = privateMethod2;
...
}
В публичном методе делегат вызывается вместо фактического метода:
public void myPublicMethod(params) {
if(some_condition)
Behavior1();
else
Behavior2();
}
Благодаря этому была исключена абсолютная зависимость между методами, поэтому теперь она может быть проверена.
Итак, теперь в тесте после создания экземпляра тестового объекта вы можете переопределить зависимое поведение:
Foo_Accessor testMe = new Foo_Accessor();
bool wasCalled1 = false
testMe.Behavior1 = new Action(() => wasCalled1 = true);
...
Assert.IsTrue(wasCalled1);