我有一個使用Silverlight Unit Test Framework的Silverlight測試項目。如何在沒有SecurityException的Silverlight中的視圖模型中爲此方法編寫單元測試?
我想在我的視圖模型中測試一個採用FileInfo對象的方法。當我通過UI手動測試時,這似乎工作正常。
現在我想要一個單元測試只是爲了AddDocument方法。我不想測試實際點擊按鈕或模擬點擊按鈕 - 我只想測試AddDocument方法。
下面是從視圖背後的代碼。 mySessionViewModel對象位於DataContext中。我想測試的方法是mySessionViewModel.AddDocument();
private void Button_Click_1(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter =
"Text Files (.txt)|*.txt|All Files (*.*)|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Multiselect = true;
bool? userClickedOK = openFileDialog1.ShowDialog();
if (userClickedOK == true)
{
IList<FileInfo> files = new List<FileInfo>();
foreach (FileInfo file in openFileDialog1.Files)
{
mySessionViewModel.AddDocument(file);
}
}
}
我把一些測試文件在Web項目的子目錄,並嘗試這樣做,但將使用Silverlight的安全模型一致的一個SecurityException:
SessionView sessionViewModel = new SessionViewModel();
DirectoryInfo di = new DirectoryInfo("testFiles");
var files = di.EnumerateFiles();
foreach (var file in files)
{
sessionViewModel.AddDocument(file);
}
// assert some stuff
安東尼謝謝。我嘗試使用FileStream類型作爲參數,而不是FileInfo - 我想讀取該文件。 Silverlight文檔說你可以使用它訪問文件系統(有限制,例如路徑不可見)。但仍然得到SecurityException。 – 2010-09-26 08:31:24
@Nick Miller:嘗試使用更基本的* Stream *作爲參數類型,並讓測試提供ResourceStream的 – 2010-09-26 08:46:40
@Nick:如果'FileInfo'由'OpenFileDialog'提供,則只能這樣做。此外,傳入流中負擔的開放和處置調用代碼這不是一個好的選擇只是爲了支持測試流。即使只有一個'OpenRead'方法,我仍然會使用包裝。現在,如果你的代碼可以與之一起工作,你可以選擇讓'OpenRead'返回一個'Stream'。如果不使用'FileStream',但你的模擬包裝需要使用'IsolatedStorageFileStream'(使用'Stream',你也可以選擇使用'StreamResourceInfo.Stream')。 – AnthonyWJones 2010-09-26 14:33:57