лучше проверить, нужна ли функция внутри или снаружи? - PullRequest
13 голосов
/ 31 мая 2010

Какая лучшая практика? вызовите функцию и вернитесь, если вы что-то тестируете, или что-то протестируете, затем вызовите?

Я предпочитаю тестирование внутри функции, потому что оно облегчает просмотр вызываемых функций.

например:

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            this.FixURLCosmetics();
        }

и

private void FixURLCosmetics()
        {
            HttpContext context = HttpContext.Current;
            if (!context.Request.HttpMethod.ToString().Equals("GET", StringComparison.OrdinalIgnoreCase))
            {
                // if not a GET method cancel url cosmetics
                return;
            };

            string url = context.Request.RawUrl.ToString();
            bool doRedirect = false;

            // remove > default.aspx
            if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase))
            {
                url = url.Substring(0, url.Length - 12);
                doRedirect = true;
            }

            // remove > www
            if (url.Contains("//www"))
            {
                url = url.Replace("//www", "//");
                doRedirect = true;
            }

            // redirect if necessary
            if (doRedirect)
            {
                context.Response.Redirect(url);
            }
        }

это хорошо:

if (!context.Request.HttpMethod.ToString().Equals("GET", StringComparison.OrdinalIgnoreCase))
            {
                // if not a GET method cancel url cosmetics
                return;
            };

или этот тест должен быть выполнен в Application_BeginRequest?

что лучше?

Thnx

Ответы [ 4 ]

13 голосов
/ 31 мая 2010

Мне кажется, что тестирование внутри функции лучше. Если вы выполняете тестирование вне функции, вам придется проверять везде, где эта функция может быть вызвана (и это приведет к большому количеству дублированного кода).

Лучше иметь все в одном месте, а затем распространять повсюду.

8 голосов
/ 31 мая 2010

Если метод абсолютно требует, чтобы определенное условие было выполнено, прежде чем он сможет выполнять свою функцию, тогда да, вы должны поместить проверку в эту функцию. Если, с другой стороны, ваш вызывающий код говорит «выполнять эту операцию только при этом наборе условий», тогда условие в вызывающем коде лучше, потому что в следующий раз, когда вы захотите вызвать этот метод, вы можете не захотеть включать это условие .

2 голосов
/ 31 мая 2010

В этом случае я чувствую, что название функции подразумевает, что что-то случится с URL в каждом случае. Кто-то может захотеть позвонить FixURLCosmetics на странице без GET и ожидать, что что-то произойдет.

Я бы переименовал FixURLCosmetics в FixGETURLCosmetics. Затем создайте исключение, если оно вызывается на странице без GET.

0 голосов
/ 31 мая 2010

На вашем месте я бы проверил в ОБАХ местах, находясь снаружи И внутри, и высмеивая внутренние вызываемые компоненты (такие как context.Request звонки), чтобы усилить также внутреннее поведение, а также высмеивать некоторые неожиданные результаты как ваш метод справляется с ними.

В этом случае такой API, как easymock, может ОЧЕНЬ упростить насмешку над внутренними компонентами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...