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

Posted

技术标签:

【中文标题】C#:使用实现私有接口的对象参数测试方法【英文标题】:C#: test a method with an object parameter implementing a private interface 【发布时间】: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 返回的模型?

【问题讨论】:

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

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

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

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

【讨论】:

以上是关于C#:使用实现私有接口的对象参数测试方法的主要内容,如果未能解决你的问题,请参考以下文章

Java单元测试对私有方法测试

Java单元测试对私有方法测试

无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类

单元测试私有代码[重复]

私有方法的单元测试c#[重复]

测试对象是不是实现接口