我想在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
}
答案 0 :(得分:2)
与其他.Net代码一样,您可以使用InternalsVisibleTo属性。
此描述以及其他几个WP7特定事物here。
然而,有一条评论是,想要对私有方法进行单元测试通常是一种代码味道 - 良好的代码通常有一个公共接口,允许彻底的单元测试,而无需专门测试私有方法。除了对单元测试和私有方法的一般评论之外,我强烈建议你看一下MVVM设计模式。您发现自己想要测试私有next_click方法的主要原因是您在UI代码中放置了大量业务逻辑。 MVVM是一种将这种逻辑放入易于测试的Model和ViewModel类中的模式,而Silverlight具有一些使该模式特别易于使用的特性。
答案 1 :(得分:0)
私有意味着您只能从当前类中调用它,而不能从外部调用它。单元测试在外面。
如果您确实想直接测试它,或者使用其他方式更改其可见性,请将其公开。