В настоящее время нет возможности использовать обе эти функции вместе.
Mock<T>.When
определяется как
public ISetupConditionResult<T> When(Func<bool> condition)`
Версия = 4.13.1.0
И ISetupConditionResult<T>
не допускает Proteced<T>
метод расширения
public static IProtectedMock<T> Protected<T>(this Mock<T> mock) where T : class;
, так как для него требуется Mock<T>
в качестве цели.
Если возможно, используйте нормальное условие и затем выполните защищенную настройку
if(condition) {
mock.Protected().Setup<int>("member").Returns(0);
}