Как может я модульный тест мой контроллер MVC ASP.NET, который использует FormsAuthentication?

Вот версия, сделанная в ints - как задано в вопросе.

Использование:

StreamUtil.takeWhile(IntStream.iterate(1, n -> n + 1), n -> n < 10);

Вот код для StreamUtil:

import java.util.PrimitiveIterator;
import java.util.Spliterators;
import java.util.function.IntConsumer;
import java.util.function.IntPredicate;
import java.util.stream.IntStream;
import java.util.stream.StreamSupport;

public class StreamUtil
{
    public static IntStream takeWhile(IntStream stream, IntPredicate predicate)
    {
        return StreamSupport.intStream(new PredicateIntSpliterator(stream, predicate), false);
    }

    private static class PredicateIntSpliterator extends Spliterators.AbstractIntSpliterator
    {
        private final PrimitiveIterator.OfInt iterator;
        private final IntPredicate predicate;

        public PredicateIntSpliterator(IntStream stream, IntPredicate predicate)
        {
            super(Long.MAX_VALUE, IMMUTABLE);
            this.iterator = stream.iterator();
            this.predicate = predicate;
        }

        @Override
        public boolean tryAdvance(IntConsumer action)
        {
            if (iterator.hasNext()) {
                int value = iterator.nextInt();
                if (predicate.test(value)) {
                    action.accept(value);
                    return true;
                }
            }

            return false;
        }
    }
}
47
задан maz 15 December 2008 в 09:30
поделиться

1 ответ

Я запустил бы путем записи интерфейса и класса обертки, который будет инкапсулировать эту логику и затем использовать интерфейс в моем контроллере:

public interface IAuth 
{
    void DoAuth(string userName, bool remember);
}

public class FormsAuthWrapper : IAuth 
{
    public void DoAuth(string userName, bool remember) 
    {
        FormsAuthentication.SetAuthCookie(userName, remember);
    }
}

public class MyController : Controller 
{
    private readonly IAuth _auth;

    public MyController(IAuth auth) 
    {
        _auth = auth;
    }

}

Теперь IAuth мог легко дразниться в модульном тесте и проверить, что контроллер называет ожидаемые методы на нем. Я НЕ был бы модульный тест FormsAuthWrapper класс, потому что это просто делегирует вызов к FormsAuthentication, который делает то, что это, как предполагается, делает (гарантия Microsoft:-)).

68
ответ дан ken2k 7 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: