使用Endeca对象在.Net中进行单元测试

使用Endeca对象在.Net中进行单元测试,.net,unit-testing,mocking,endeca,.net,Unit Testing,Mocking,Endeca,Endeca的大多数或所有对象都有内部构造函数。我正在从事一个很好的项目,该项目在EndecaAPI方面缺乏很好的测试覆盖率,有什么好的策略可以对与Endeca的交互进行单元测试吗 到目前为止,我们最好的是穷人的适配器模式: public class DimValue : IDimValue { public DimValue(Dimension dim, DimVal dimValue) { Dimension = dim; Value = di

Endeca的大多数或所有对象都有内部构造函数。我正在从事一个很好的项目,该项目在EndecaAPI方面缺乏很好的测试覆盖率,有什么好的策略可以对与Endeca的交互进行单元测试吗

到目前为止,我们最好的是穷人的适配器模式:

public class DimValue : IDimValue
{
    public DimValue(Dimension dim, DimVal dimValue)
    {
        Dimension = dim;
        Value = dimValue;
    }

    public virtual bool IsNavigable()
    {
        return Value.IsNavigable();
    }

    public virtual long Id()
    {
        return Value.Id;
    }

    // and so on...
}

然后我们可以模仿自己的类型DimValue。这是保持API尽可能可测试的最佳方法吗?或者还有其他方法比这更好吗?

如果您试图测试API的使用情况,那么我推荐您提到的方法

在自己的抽象而不是别人的抽象上编写应用程序是一个很好的设计目标。适配器层使您有机会将API转换为开发人员更熟悉的领域语言,并使您可以在以后使用的产品在某些方面出现问题时自由更改技术

Resharper具有创建包装器类的强大功能。创建一个类,添加一个您想要包装的类型的成员。。然后触发生成委托重构。选择“所有公众”就可以了。。一个包装类

仅公开您实际使用的功能子集。在包装代码中,提供接口以便模拟

如果您将Endeca的API作为某种形式的回归套件进行测试,这样您就可以更容易地接受新发布的API,那么我只需在更“可接受”的级别编写测试;练习他们给你的API。但同样,只测试您实际使用它们的API的方式

我会用上面的方法,但是

TypeMock将允许您模拟没有接口的类,因此可能允许另一种方法


希望这有帮助

大多数Endeca类都是具体的,因此很难进行单元测试,在我们上一个项目中,我们必须定义自己的抽象层,确切地说,它是我们自己的代码和Endeca API(例如IENDECQuery)之间的一个外观层。有了这个抽象层,我们可以在没有任何真正的Endeca访问的情况下快速进行测试,您知道每次打开一个Endeca连接都会花费您几秒钟的时间。实现所有必要的Endeca伪对象需要大量的工作。我们的应用程序是一个电子商务网站,我们使用Endeca进行所有的产品列表、搜索功能