C#:使用实现私有接口的对象参数测试方法

时间:2015-08-27 19:34:05

标签: c# testing interface mocking private

我有一个带有方法的第一个项目,该方法返回一个Model对象实例,该实例是使用私有类PrivateModel继承Model和私有接口IFoo实现的。

样品:

PROJECT1:

public class Model {}
private interface IFoo {}
private class PrivateModel : Model, IFoo {}

// a sample class with the returning method
public class Bar
{
    public static Model CreateModelInstance()
    { return new PrivateModel(); }

    // code...
}

Project2的:

// get model instance
var model = Bar.CreateModelInstance(); // return a Model

第二个项目使用模型参数调用方法“Act”,但Act的实现测试模型是否为PrivateModel(使用IFoo实现)。

PROJECT1:

public class Bar
{
    // code...

    public static bool Act(Model model)
    {
        // sample logic
        return model is IFoo;
    }
}

现在的问题是:

因为我必须测试一个执行Act方法调用的方法(它是静态的),并且我无法提升它,所以我必须构建一个实现IFoo的对象(即私有)。我可以在测试项目(第三个项目)中实现类似于TestClass: IFoo的类,或者我必须使用从Project1返回的模型吗?

1 个答案:

答案 0 :(得分:1)

您无法在程序集/类之外实现接口定义的私有接口。

重新设计代码以使其更易于测试或使用从Project1返回的模型(或者创建实现正确接口的模型的任何东西)..

您的情况实际上可能是私有接口很有用的极少数情况之一 - 当您因某些原因无法密封实现类时,请确保非常严格的对象创建规则。是否对您的情况有用 - 您的电话。