Модульное тестирование частных методов в WP7 - PullRequest
1 голос
/ 04 октября 2011

Я хочу написать модульные тесты для моих личных методов в коде приложения 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
    }

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Так же, как и с другим кодом .Net, вы можете использовать атрибут InternalsVisibleTo .

Здесь есть описание этого, а также несколько других специфических для WP7 вещей здесь ,

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


Помимо общего комментария о модульном тестировании и частных методах, я настоятельно рекомендую вам взглянуть на шаблон проектирования MVVM.Основная причина, по которой вы захотите протестировать закрытый метод next_click, заключается в том, что вы вложили в свой код пользовательского интерфейса много бизнес-логики.MVVM - это шаблон, который помещает такую ​​логику в легко тестируемые классы Model и ViewModel, а Silverlight имеет несколько функций, которые делают шаблон особенно простым в использовании.

0 голосов
/ 04 октября 2011

Частный означает, что вы можете звонить только изнутри текущего класса, а не извне.Юнит-тест снаружи.

Сделайте его публичным, если вы действительно хотите проверить его напрямую, или измените его видимость другими способами.

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