我在Visual Studio 2013中为Windows 8 metro(又名WinRT)创建了一个应用程序。我通过使用DataContractSerializer序列化为XML来保存用户数据。我还为单元测试添加了单元测试项目。我想测试从XML保存/加载。它在我的应用程序中运行得很好,我可以浏览到#34; LocalState"文件夹并验证XML包含正确的数据。但是,单元测试方法似乎并不像主应用程序那样创建任何XML文件,尽管声称已经通过"传递了#34;。
单元测试是否将数据存储在其他地方?我怎样才能真正获得XML文件?理想情况下,我希望使用单元测试来生成大型数据集,然后将它们加载到主应用程序中,因此仅仅保存/加载/检查相等性是不够的。
这是我用来保存数据的代码,它在主应用程序中再次正常工作。
string localData = ObjectSerializer<myObject>.Serialize(_myObject);
if (!string.IsNullOrEmpty(localData))
{
StorageFile localFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("Data.xml", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(localFile, localData);
}
答案 0 :(得分:0)
单元测试项目可能在AppData \ Local \ Packages中创建它自己的(临时的,隐藏的)包 - 我的。 我使用了MSTest - DeploymentItem attribute unavailable on windows store test project
中提到的两步法我的数据位于单元测试项目的子文件夹中,例如SMEPS_SM_SealBeach_Test
,我希望这个文件夹及其所有文件都在我的应用程序本地文件夹中。这些文件标记为 copy-always 。
首先,使用构建事件后期构建,如下所示:
if not exist "$(TargetDir)AppX" mkdir "$(TargetDir)AppX"
if not exist "$(TargetDir)AppX\SMEPS_SM_SealBeach_Test" mkdir "$(TargetDir)AppX\SMEPS_SM_SealBeach_Test"
copy /Y "$(TargetDir)SMEPS_SM_SealBeach_Test\*.*" "$(TargetDir)AppX\SMEPS_SM_SealBeach_Test\"
这会将您的数据导入Appx。
然后,在运行时,将数据从Appx复制到app本地文件夹:
[TestInitialize]
async public Task TestDatabaseInitilize()
{
//manually copied data from
var site = "SMEPS_SM_SealBeach_Test";
var appx = Package.Current.InstalledLocation;
var reposTestFolder = await appx.GetFolderAsync(site);
var testFiles = await reposTestFolder.GetFilesAsync();
var localfolder = ApplicationData.Current.LocalFolder;
var reposFolder = await localfolder.CreateFolderAsync(site, CreationCollisionOption.OpenIfExists);
foreach (var file in testFiles)
{
await file.CopyAsync(reposFolder);
}
}
现在,该应用已有SMEPS_SM_SealBeach_Test
个文件夹,其所有数据都可以用于测试。
答案 1 :(得分:-1)
我认为,您应该从此功能中抽象出一个界面,允许您对应用程序的其余部分进行单元测试,而无需手动验证文件是否确实已在磁盘上创建。
然后通过模拟或伪造它,您只需检查是否已使用good参数调用接口方法。
public interface ILocalDataService {
Task SaveToLocal(string localData, string filename)
}
对于进一步的测试,如果需要读取这些本地数据,请在此接口中添加加载方法。然后通过模拟它,你将能够使这个方法返回你想要的任何东西,甚至是损坏的数据: - )