单元测试WP7中的私有方法

时间:2011-10-04 13:08:27

标签: c# unit-testing 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
    }

2 个答案:

答案 0 :(得分:2)

与其他.Net代码一样,您可以使用InternalsVisibleTo属性。

此描述以及其他几个WP7特定事物here

然而,有一条评论是,想要对私有方法进行单元测试通常是一种代码味道 - 良好的代码通常有一个公共接口,允许彻底的单元测试,而无需专门测试私有方法。


除了对单元测试和私有方法的一般评论之外,我强烈建议你看一下MVVM设计模式。您发现自己想要测试私有next_click方法的主要原因是您在UI代码中放置了大量业务逻辑。 MVVM是一种将这种逻辑放入易于测试的Model和ViewModel类中的模式,而Silverlight具有一些使该模式特别易于使用的特性。

答案 1 :(得分:0)

私有意味着您只能从当前类中调用它,而不能从外部调用它。单元测试在外面。

如果您确实想直接测试它,或者使用其他方式更改其可见性,请将其公开。