Как бы я протестировал этот код .Net (рефакторинг разрешен) - PullRequest
3 голосов
/ 07 января 2011

Я уже некоторое время крутил свои колеса, пытаясь понять, как я могу выполнить модульное тестирование следующего кода. Сначала я собирался использовать Moq, чтобы высмеивать все, но это не включает в себя возможность издеваться над закрытыми классами. Я знаю, что мне нужно абстрагировать вызовы реализации (конфигурации) с помощью интерфейса? но я не могу заставить все это работать правильно.

Код можно изменить, но я бы предпочел, чтобы методы оставались статичными, если только у вас нет веских причин не делать этого. Вы можете добавить интерфейсы или создать любые необходимые швы. Кроме того, GetConnStringByName () может быть реорганизован для возврата соответствующей строки вместо ConnectionStringSettings.

Мысли

namespace Stackoverflow.Rocks
{
    /// <summary>
    /// Utility class for progmattically selecting values from the Web.config file.
    /// </summary>
    public class WebConfigStrings
    {
        //private static Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);

        /// <summary>
        /// Retrieves the desired connection string value based upon the target name.
        /// </summary>
        /// <param name="connectionStringName">The target connection string referenced in the Web.Config</param>
        /// <returns>The value specified in the Web.Config by your connectionStringName</returns>
        public static ConnectionStringSettings GetConnStringByName(string connectionStringName)
        {
            Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
            ConnectionStringSettings connString;
            connString = rootWebConfig.ConnectionStrings.ConnectionStrings[connectionStringName];
            return connString;
        }

        /// <summary>
        /// Retrieves the desired application string value based upon the target name.
        /// </summary>
        /// <param name="applicationStringName">The target application string referenced in the Web.Config</param>
        /// <returns>The value specified in the Web.Config by your applicationStringName</returns>
        public static string GetAppStringByName(string applicationStringName)
        {
            string appString = "";
            appString =  ConfigurationManager.AppSettings[applicationStringName];
            return appString;
        }

    }
}

Ответы [ 4 ]

2 голосов
/ 07 января 2011

Рефакторинг ваших классов для использования новых типов, определенных в System.Web.Abstractions . Эта сборка определяет фиктивные типы, которые обертывают основные (и в основном статические или запечатанные) типы, вокруг которых построен asp.net. Это позволит вам переключаться между реальными типами времени выполнения с помощью макетов в тестах.

0 голосов
/ 26 марта 2013

Если кому-то интересно, вот что я делаю, я использую сборку Fakes для System.Web и мой блок с использованием (ShimsContext.Create ()) у меня:

System.Web.Configuration.Fakes.ShimWebConfigurationManager.ConnectionStringsGet = () => new ConnectionStringSettingsCollection(){ new ConnectionStringSettings("name", "fake connection string")};

Неуверен, что это то, что вы ищете, но подумал, что стоит упомянуть.

0 голосов
/ 07 января 2011

Самый простой способ - добавить фиктивные значения в файл конфигурации.Поскольку ваши методы статичны, вы не можете высмеивать класс с помощью Moq / RhinoMocks.Вам придется использовать TypeMock или, возможно, Telerik JustMock, которые имеют эту возможность (но также стоят денег).

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

HTH.

0 голосов
/ 07 января 2011

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

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