#c# #unit-testing #windows-phone-7
#c# #модульное тестирование #windows-phone-7
Вопрос:
Я хочу написать модульные тесты для своих частных методов в коде приложения WP7. Итак, я хотел бы знать, как вызывать частные методы из кода модульного тестирования Silverlight. Ниже приведен фрагмент кода, для которого я хотел бы написать модульный тест.
private void Next_Click(object sender, EventArgs e)
{
nextBtn.IsEnabled = false;
checking = true;
App app = Application.Current as App;
//Microsoft.Phone.Controls.TiltEffect.SetIsTiltEnabled((App.Current as App).RootFrame, true);
if (String.IsNullOrEmpty(AppHelper.AuthenticationToken))
{
// Get Authentication Token
try
{
app.Flickr.AuthGetTokenAsync(frob, r =>
{
Dispatcher.BeginInvoke(() =>
{
if (r.HasError)
{
MessageBox.Show("Flickr error (" r.ErrorMessage ") - did you click Ok before setting flickr up in your browser?");
}
else
{
// Store the authentication token
AppSettings.AuthenticationToken = r.Result.Token;
if (AppSettings.IsLoginIconPressed == false)
{
NavigationService.Navigate(new Uri("/Upload.xaml", UriKind.Relative));
}
else
{
app.isNavigatedFromPage = true;
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
AppSettings.IsLoginIconPressed = false;
}
}
checking = false;
});
});
}
catch (Exception ex)
{
MessageBox.Show("Flickr error (" ex.Message ") - did you click Ok before setting flickr up in your browser?");
}
} // End of if
else
{
if (AppSettings.IsLoginIconPressed == false)
{
app.isNavigatedFromPage = true;
NavigationService.Navigate(new Uri("/Upload.xaml", UriKind.Relative));
}
else
{
app.isNavigatedFromPage = true;
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
AppSettings.IsLoginIconPressed = false;
}
} // End of else
}
Комментарии:
1. Выставьте его как общедоступный (т. Е. Измените Его с частного на общедоступный). Большинство тестовых пакетов рассматривают только общедоступные интерфейсы, поскольку это та часть, которая обычно нуждается в тестировании, т.Е. «общедоступный интерфейс».
Ответ №1:
Так же, как и с другими .В чистом коде вы можете использовать атрибут InternalsVisibleTo.
Здесь есть описание этого, а также нескольких других специфичных для WP7 вещей.
Однако один комментарий заключается в том, что желание тестировать частные методы часто является запахом кода — хорошо продуманный код обычно имеет открытый интерфейс, который позволяет проводить тщательное тестирование без необходимости специально тестировать частные методы.
В дополнение к общему замечанию о модульном тестировании и частных методах я настоятельно рекомендую вам взглянуть на шаблон проектирования MVVM. Основная причина, по которой вы хотите протестировать частный метод next_click, заключается в том, что вы вложили в свой код пользовательского интерфейса много бизнес-логики. MVVM — это шаблон, который помещает такую логику в легко тестируемые классы Model и ViewModel, а Silverlight имеет несколько функций, которые делают шаблон особенно простым в использовании.
Ответ №2:
Private означает, что вы можете вызывать его только из текущего класса, а не извне. Модульный тест находится снаружи.
Сделайте его общедоступным, если вы действительно хотите протестировать его напрямую, или измените его видимость другими способами.