Как выполнить модульный тест (в C #), чтобы кнопка была нажата? - PullRequest
2 голосов
/ 14 декабря 2010

У меня есть пользовательский элемент управления, в котором есть кнопка, чей обработчик события click содержит основную логику.Я хочу проверить этот обработчик нажатия кнопки.Эта функция-обработчик вызывает открытую функцию другого пользовательского элемента управления (который находится в отдельном проекте C #), который в конечном итоге вызывает открытую функцию эталонной сборки.Кто-нибудь может подсказать, пожалуйста - как будет проходить модульный тест для такого обработчика?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

При юнит-тестировании мы тестируем юнит - в данном случае пользовательский контроль.И больше ничего.Но мы не должны позволять пользовательскому контролю получать доступ к внешнему миру, мы должны использовать методы насмешек.Например, если ваш UserControlA вызывает UserControlB, создайте интерфейс для UserControlB и замените его на фиктивный UserControlB:

   class UserControlA {
       UserControlBInterface BReference;
       public void setBReference(UserControlBInterface reference) { this.BReference = reference };
       void OnClick (...) { BReference.callAMethod(); }
   }
   class MockupForB : UserControlBInterface {
       boolean called=false;
       public void callAMethod() { this.called = true; }

   }
   class TesterA : UnitTest {
       public void testOnClick()
       {   UserControlA a  = new UserControlA();  MockupForB mockup = new MockupForB(); a.setBReference(mockup);
           a.Button1.PerformClick(...); //following Aaronontheweb's advice
           assertTrue(mockup.called,"the method callAMethod not being called by UserControlA");
       }
   }

И чтобы UserControlB действительно вызывал справочную библиотеку, это относится к модульному тесту для UserControlB.

3 голосов
/ 14 декабря 2010

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

Редактировать: Ах, это на самом деле уже существует: http://msdn.microsoft.com/en-us/library/hkkb40tf(VS.90).aspx

...