Написание модульных тестов для класса, который ссылается на элементы управления пользовательского интерфейса

2

У меня есть абстрактный класс, на который наследуется элемент управления User, для которого я хотел бы написать модульные тесты. Я понимаю, что мне нужно создать класс-макет для тестирования абстрактных классов. Абстрактный класс имеет ссылки на элементы управления пользовательским интерфейсом (например: базовый метод, который имеет веб-контроль в качестве аргумента). Мой вопрос: как я могу написать модульные тесты для любых методов, которые ссылаются на элементы управления в пространстве имен System.Web.UI?

Спасибо

EDIT: Вот пример кода, который у меня есть

public abstract SpecialUserControl : System.Web.UI.UserControl
{
    protected virtual void DoSomething(TextBox txtBoxName)
    {
         //Here the logic I want to write unit test for
    }
}

В ascx.cs

public partial class MyUsercontrol : SpecialUserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    base.DoSomething( txtBoxName );
    }

}

В aspx.cs

public partial class SomePage : BasePage
{
    protected void Page_Load(object sender, EventArgs e)
    {
       //Dynamically loaded
       LoadControl("MyUserControl.ascx");
    }

}
Теги:
unit-testing

3 ответа

2

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

Было бы проще, если бы ваш код зависел только от интерфейсов, а не от конкретных классов, потому что тогда вы могли бы просто макетировать интерфейс без необходимости макетировать весь класс.

Было бы еще проще, если бы между вашим кодом и элементами System.Web.UI был некоторый уровень абстракции. Это может облегчить тестирование, а также поддерживать.

Я предполагаю, что моя точка зрения заключается в том, что существует такая вещь, как проектирование кода для тестирования единиц.

Возможно, будет более конкретный совет, если вы дадите более конкретный сценарий.

2

и мой ответ будет "Что мешает вам писать эти тесты?" (Мне нужно больше кода-контекста, чтобы дать более подробный ответ)

Относитесь к ним так же, как к любому другому сотруднику/зависимости для вашего кода. Если элементы управления пользовательским интерфейсом легко создавать в тестовом наборе - вы должны просто идти вперед и настраивать свое состояние, действовать на них и утверждать свои ожидания.
Если элементы управления пользовательским интерфейсом нелегко или дорого создавать, отвлеките их с помощью интерфейса (содержащего только те методы, с которыми вы должны взаимодействовать с элементом управления) и подключайте к реализации mock/fake/stub.

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

0

Из того, что я понимаю о вашей проблеме, вам понадобится создать элемент управления для вашего абстрактно-производного класса для инициализации. Таким образом, вам нужно будет создать конкретный класс для тестирования вашего абстрактного класса; вам также понадобится макет веб-элемента управления (из вашего примера), который он будет использовать для инициализации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню