【问题标题】:C#: test a method with an object parameter implementing a private interfaceC#:使用实现私有接口的对象参数测试方法
【发布时间】:2015-11-22 08:18:35
【问题描述】:

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

示例:

项目1:

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...
}

项目2:

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

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

项目1:

public class Bar
{
    // code...

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

现在的问题:

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

【问题讨论】:

  • 您的代码必须有更多内容,因为那甚至无法编译。请提供一个简短但完整的示例来说明问题。

标签: c# testing interface mocking private


【解决方案1】:

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

要么重新设计代码以使其更具可测试性,要么使用从 Project1 返回的模型(或任何创建实现正确接口的模型)..

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

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 2010-10-20
    • 2016-11-25
    • 1970-01-01
    • 2017-11-06
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多