Unit testing 如何在关键CRM上对ASR进行单元测试

Unit testing 如何在关键CRM上对ASR进行单元测试,unit-testing,pivotal-crm,Unit Testing,Pivotal Crm,我正在使用Pivotal CRM,我没有找到简单的方法来为该软件的ASR编写单元测试代码。你有过这个软件的编程测试经验吗 编辑:我想到了一种简单但并不完美的测试方法。但是我愿意把赏金给任何一个能提供最小洞察力的人 我找到的唯一可能的答案是将逻辑移到ASR调用的其他类别。通过这种方式,您可以对类进行单元测试。ASR变得更加复杂,只能作为集成测试的一部分进行测试 我找到的唯一可能的答案是将逻辑移到ASR调用的其他类别。通过这种方式,您可以对类进行单元测试。ASR变得更加复杂,只能作为集成测试的一部分

我正在使用Pivotal CRM,我没有找到简单的方法来为该软件的ASR编写单元测试代码。你有过这个软件的编程测试经验吗


编辑:我想到了一种简单但并不完美的测试方法。但是我愿意把赏金给任何一个能提供最小洞察力的人

我找到的唯一可能的答案是将逻辑移到ASR调用的其他类别。通过这种方式,您可以对类进行单元测试。ASR变得更加复杂,只能作为集成测试的一部分进行测试

我找到的唯一可能的答案是将逻辑移到ASR调用的其他类别。通过这种方式,您可以对类进行单元测试。ASR变得更加复杂,只能作为集成测试的一部分进行测试

好问题。我会在实现的方法上注入存根或模拟来设置测试。因此,如果我实现如下所示的IRFormScript接口。我可以使用一个实现IRForm接口的存根来设置对注入到方法中的表单对象的期望。这些参数中的一些也只是字符串,所以很简单。您还必须删除Pivotal的任何其他接口,以便在不影响实际系统的情况下测试您的功能。(IRSystem7、DataAccess等)。希望这有帮助


好问题。我会在实现的方法上注入存根或模拟来设置测试。因此,如果我实现如下所示的IRFormScript接口。我可以使用一个实现IRForm接口的存根来设置对注入到方法中的表单对象的期望。这些参数中的一些也只是字符串,所以很简单。您还必须删除Pivotal的任何其他接口,以便在不影响实际系统的情况下测试您的功能。(IRSystem7、DataAccess等)。希望这有帮助


我会再三考虑将任何东西编程到关键的CRM中。CDC只是不熟悉现代编程技术。将其视为“仅在绝对必要时进行调整”的平台,您会做得很好

我并不想说得太苛刻,但如果你在stackoverflow.com上发布关于Pivotal CRM的问题,那么你可能是错误地使用了Pivotal CRM


我这么说是因为我知道错误使用它会带来的第一手痛苦。我用它工作了6年。

我会三思而后行,将任何东西编程到关键的CRM中。CDC只是不熟悉现代编程技术。将其视为“仅在绝对必要时进行调整”的平台,您会做得很好

我并不想说得太苛刻,但如果你在stackoverflow.com上发布关于Pivotal CRM的问题,那么你可能是错误地使用了Pivotal CRM


我这么说是因为我知道错误使用它会带来的第一手痛苦。我用它工作了6年。

你好,布兰登,非常感谢。我在接受你的答案(见)时遇到问题,无论如何我需要尝试一下。但是我觉得我遗漏了一些重要的东西,而且我对测试还很陌生。模仿或删除所有这些东西可能看起来像是一项工作,但是使用Rhino Mocks这样的模仿框架是很容易的。这真的是关于能够单独测试这件事。这是值得努力的。祝你好运嗨,布兰登,非常感谢。我在接受你的答案(见)时遇到问题,无论如何我需要尝试一下。但是我觉得我遗漏了一些重要的东西,而且我对测试还很陌生。模仿或删除所有这些东西可能看起来像是一项工作,但是使用Rhino Mocks这样的模仿框架是很容易的。这真的是关于能够单独测试这件事。这是值得努力的。祝你好运我同意这背后有点痛苦,但你可能会对很多“Enterprisey”软件这么说。这里的要点是,您确实有一种方法可以通过使用存根/模拟技术来测试您要放入实现中的代码。我的建议是一定要这样做!我同意这背后有点痛苦,但你可能会对很多“Enterprisey”软件这么说。这里的要点是,您确实有一种方法可以通过使用存根/模拟技术来测试您要放入实现中的代码。我的建议是一定要这样做!
public class TDD : Pivotal.Interop.RDALib.IRFormScript
{        
    public object AddFormData(Pivotal.Interop.RDALib.IRForm pForm, object Recordsets, ref object ParameterList)
    {
        throw new NotImplementedException();
    }

    public void DeleteFormData(Pivotal.Interop.RDALib.IRForm pForm, object RecordId, ref object ParameterList)
    {
        throw new NotImplementedException();
    }

    public void Execute(Pivotal.Interop.RDALib.IRForm pForm, string MethodName, ref object ParameterList)
    {
        throw new NotImplementedException();
    }

    public object LoadFormData(Pivotal.Interop.RDALib.IRForm pForm, object RecordId, ref object ParameterList)
    {
        throw new NotImplementedException();
    }

    public object NewFormData(Pivotal.Interop.RDALib.IRForm pForm, ref object ParameterList)
    {
        throw new NotImplementedException();
    }

    public void NewSecondaryData(Pivotal.Interop.RDALib.IRForm pForm, object SecondaryName, ref object ParameterList, ref Pivotal.Interop.ADODBLib.Recordset Recordset)
    {
        throw new NotImplementedException();
    }

    public void SaveFormData(Pivotal.Interop.RDALib.IRForm pForm, object Recordsets, ref object ParameterList)
    {
        throw new NotImplementedException();
    }

    public void SetSystem(Pivotal.Interop.RDALib.RSystem pSystem)
    {
        throw new NotImplementedException();
    }     
}