测试已保存设置的升级路径

时间:2011-01-03 16:41:40

标签: c# settings

我正在使用C#,我的软件中有一个自定义的“设置”对象,保存在磁盘上,我需要能够在升级软件版本时进行测试。

例如,如果我的软件带有“版本A”并且具有该版本的设置,那么当我升级到我的软件的“版本B”时,我想确保“设置A”可以干净地升级。 / p>

稍后我升级到我的软件的“C版”时,我必须测试A-> C以及B-> C的升级路径(版本n + 1需要比测试用例多n + 1个)版本n确实。)

我担心的一个问题是测试路径的这种指数式增长很快就会难以维持。

有没有一种标准的处理方法?


我遇到的一些重要问题是:

设置不一定存储在本地计算机上,因此我继承的软件需要能够将这些设置从计算机传输到计算机。

MSDN表示他们构建的ClickOnce设置不直接支持,我必须“开发[我]自己的自定义设置类,用于在远程计算机上存储设置。”

3 个答案:

答案 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);但为了限制情景,这是一个很小的代价。

最后,您只需构建一个升级脚本,将您从之前的版本转移到当前版本。