我正在使用C#,我的软件中有一个自定义的“设置”对象,保存在磁盘上,我需要能够在升级软件版本时进行测试。
例如,如果我的软件带有“版本A”并且具有该版本的设置,那么当我升级到我的软件的“版本B”时,我想确保“设置A”可以干净地升级。 / p>
稍后我升级到我的软件的“C版”时,我必须测试A-> C以及B-> C的升级路径(版本n + 1需要比测试用例多n + 1个)版本n确实。)
我担心的一个问题是测试路径的这种指数式增长很快就会难以维持。
有没有一种标准的处理方法?
我遇到的一些重要问题是:
设置不一定存储在本地计算机上,因此我继承的软件需要能够将这些设置从计算机传输到计算机。
MSDN表示他们构建的ClickOnce设置不直接支持,我必须“开发[我]自己的自定义设置类,用于在远程计算机上存储设置。”
答案 0 :(得分:2)
安装程序通常必须使用管理员权限运行,因此通常可以访问网络。您需要做的就是访问当前版本的应用程序配置(如果您这样做,则访问注册表项)并获取文件位置,然后使用FileStream将其拉出来,无论是来自本地comp,本地服务器,或企业服务器,只要您可以通过LAN / WAN进行。从Internet地址拉取将需要不同的机制。
我要做的是对转化进行分层。要将设置文件从A转换为D,首先将其转换为B,然后转换为C,然后转换为D.这可能听起来不符合要求,但只有在用户具有极其过时版本的情况下才会这样做。软件;以前版本的定期更新只需要经过一层。它还具有使每层闭合变化的极大优势;一旦你有代码正确地将版本A转换为版本B,你永远不必重新进入并可能破坏它以添加版本C更新逻辑。
答案 1 :(得分:2)
我在升级后首次运行应用程序时添加了关于可能执行此操作的注释。
我不清楚您是否需要开发所有这些升级路径或将其集成到安装/升级过程中。
如果问题在于如何构建和测试越来越多的设置升级,那么一个简单,相对简单的方法是:
public interface ISettingsUpgrader
{
void UpgradeSettings();
}
public abstract class SettingsUpgrader : SettingsUpgrader
{
protected int version;
public virtual void UpgradeSettings()
{
// load settings and read version info
version = settingsVersion;
}
}
public class SettingsUpgraderV2 : SettingsUpgrader
{
public override void UpgradeSettings()
{
base.UpgradeSettings();
if(version > 1) return;
// do the v1 -> v2 upgrade
}
}
public class SettingsUpgraderV3 : SettingsUpgraderV2
{
public override void UpgradeSettings()
{
base.UpgradeSettings();
if(version > 2) return;
// do the v2 -> v3 upgrade
}
}
因此,对于每个新版本,您只需遵循此约定并实现先前版本的升级。所有基本设置文件处理都在基础,抽象类中进行,并且将根据需要执行连续升级。
测试方面,每个新版本只需要验证(1)调用基本方法 - 现有测试已涵盖其功能,以及(2)最新v(n-1) - > ; v(n)正确执行。
作为补充说明,除非您不允许回滚到以前版本的选项,否则在每个级别实现设置回滚过程可能是一种好的形式。
答案 2 :(得分:1)
处理升级的最佳方法是一步一步。
举个例子: 构建从A到B的升级路径,然后从B到C建立升级路径。
当测试从A到C的升级时,你必须首先运行A到B,然后B到C。
这将限制测试场景。我见过的很多软件都是这样升级的。这可能导致诸如将字段添加到表(升级到B)之类的事情,只是立即将其删除(升级到C);但为了限制情景,这是一个很小的代价。
最后,您只需构建一个升级脚本,将您从之前的版本转移到当前版本。