Xaml UWP单元测试项目清除本地设置值

Xaml UWP单元测试项目清除本地设置值,xaml,uwp,windows-runtime,microsoft-metro,Xaml,Uwp,Windows Runtime,Microsoft Metro,我在解决方案中有一个UWP应用程序和一个单元测试项目。当我尝试在调试模式下运行单元测试项目时,存储在应用程序本地设置中的数据将被清除 我将获得如下所示的本地设置 var localSettings= Windows.Storage.ApplicationData.Current.LocalSettings; localSettings.Values["exampleSetting"] = "Hello Windows"; 我将在运行应用程序时设置“exampleSetting”的值。现在我将关

我在解决方案中有一个UWP应用程序和一个单元测试项目。当我尝试在调试模式下运行单元测试项目时,存储在应用程序本地设置中的数据将被清除

我将获得如下所示的本地设置

var localSettings= Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["exampleSetting"] = "Hello Windows";

我将在运行应用程序时设置“exampleSetting”的值。现在我将关闭应用程序,然后当我运行单元测试项目并尝试访问“exampleSetting”时,该值为空。

内容太大,无法放在评论中,因此我将其作为答案发布

如果您提供的代码是您为向存储添加值而编写的唯一代码,那么您将丢失更新本地设置的最后一行代码。更新后的代码如下所示:

var localSettings= Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["exampleSetting"] = "Hello Windows";
Windows.Storage.ApplicationData.Current.LocalSettings = localSettings;
最后一行将现有本地设置更新为修改后的设置


现在说到本地存储测试,测试是在测试环境中完成的,因此测试将无法在环境之外存储或保留值,因此,当您在单元测试中将数据存储到应用程序的本地存储时,它将不会在应用程序运行和vis.ver时反映出来。我之所以这样说,是因为我在为我的UWP应用程序使用
nunitests
时遇到了同样的问题

内容太大,无法放在评论中,因此我将把它作为答案发布

如果您提供的代码是您为向存储添加值而编写的唯一代码,那么您将丢失更新本地设置的最后一行代码。更新后的代码如下所示:

var localSettings= Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["exampleSetting"] = "Hello Windows";
Windows.Storage.ApplicationData.Current.LocalSettings = localSettings;
最后一行将现有本地设置更新为修改后的设置



现在说到本地存储测试,测试是在测试环境中完成的,因此测试将无法在环境之外存储或保留值,因此,当您在单元测试中将数据存储到应用程序的本地存储时,它将不会在应用程序运行和vis.ver时反映出来。我之所以这样说,是因为我在为我的UWP应用程序使用
nunitests
时遇到了同样的问题

定义“Hello Windows”和选中“Hello Windows”时,您的问题不清楚。请编辑该问题。你现在能明白我的意思了吗?你的意思是,你将要从unittest项目访问应用程序数据吗?单元测试项目和你的应用程序项目使用不同的应用程序数据位置。是的,你明白我的意思。但是如果我想测试一个访问应用程序本地设置的方法,我怎么能对该方法进行单元测试呢?单元测试代码应该在单元中设计。您的值设置是一个单位,而您的值读数是另一个单位。尝试通过分离读取/设置值来重新设计测试代码。这可能超出了您的问题范围。定义“Hello Windows”和选中“Hello Windows”时,您的问题不清楚。请编辑该问题。你现在能明白我的意思了吗?你的意思是,你将要从unittest项目访问应用程序数据吗?单元测试项目和你的应用程序项目使用不同的应用程序数据位置。是的,你明白我的意思。但是如果我想测试一个访问应用程序本地设置的方法,我怎么能对该方法进行单元测试呢?单元测试代码应该在单元中设计。您的值设置是一个单位,而您的值读数是另一个单位。尝试通过分离读取/设置值来重新设计测试代码。这可能超出了您的问题范围。您知道有什么方法可以阻止单元测试清除本地设置吗?我正在将一个15兆SQLite数据库同步到我的本地设置,这需要一些时间,我需要对数据库执行一些测试。如果我每次都要同步整个数据库,那就不可能进行快速的单元测试了。@MelbourneDeveloper老实说,我建议您模拟与SQLite DB交互的服务。一旦您准备好了单元测试和组件测试,就可以在集成测试中处理SQLite测试用例。没有任何方法(至少我知道)可以帮助您保留在单元测试期间所做的SQLiteDB更改。也就是说,如果,如果一个测试依赖于另一个测试来获取一些数据,这是一个模拟的暗示。大多数人都这么说。但是,我需要测试数据层。所以,模拟测试只是跳过了我需要测试的部分。我现在所做的是在单元测试(或者集成测试,如果你愿意的话)需要的地方将数据库复制到本地存储中。这是一个大难题。不确定为什么UWP单元测试会自动假定您想要测试的唯一方式是在干净状态下,而实际上您应该在干净和肮脏状态下进行测试。@MelbourneDeveloper是的,我不知道您在测试数据层。开始吧。注意文档中的
新SqliteConnection(“DataSource=:memory:”)
。这就是触发从干净的板凳上运行的行为的原因。您知道有什么方法可以阻止单元测试清除本地设置吗?我正在将一个15兆SQLite数据库同步到我的本地设置,这需要一些时间,我需要对数据库执行一些测试。如果我每次都要同步整个数据库,那就不可能进行快速的单元测试了。@MelbourneDeveloper老实说,我建议您模拟与SQLite DB交互的服务。一旦您准备好了单元测试和组件测试,就可以在集成测试中处理SQLite测试用例。没有任何方法(至少我知道)可以帮助您保留在单元测试期间所做的SQLiteDB更改。也就是说,如果,如果一个测试依赖于另一个测试来获取一些数据,这是一个模拟的暗示。大多数人都这么说。但是,我需要测试数据层。所以,模拟测试只是跳过了我需要测试的部分。我现在所做的是在单元测试(或者集成测试,如果你愿意的话)需要的地方将数据库复制到本地存储中。这是一个大难题。不确定为什么UWP单元测试自动假定