当前位置:  开发笔记 > 编程语言 > 正文

如何使用静态方法进行模拟?

如何解决《如何使用静态方法进行模拟?》经验,为你挑选了4个好方法。

我是模拟对象的新手,但我知道我需要让我的类实现接口才能模拟它们.

我遇到的问题是,在我的数据访问层,我想要静态方法,但我不能在接口中放置静态方法.

最好的方法是什么?我应该只使用实例方法(这似乎是错误的)还是有其他解决方案?



1> Jon Skeet..:

是的,您使用实例方法.静态方法基本上说,"有一种方法可以实现这个功能 - 它不是多态的." 模拟依赖于多态性.

现在,如果你的静态方法在逻辑上不关心你正在使用什么实现,那么它们可能能够将接口作为参数,或者可能在没有与状态交互的情况下工作 - 但是否则你应该使用实例(并且可能依赖注入将所有内容连接在一起).



2> Rick Mineric..:

我通过谷歌发现了一个博客,其中有一些关于如何做到这一点的很好的例子:

    将类重构为实例类并实现接口.

    你已经说过你不想这样做.

    对包含静态类成员的委托使用包装器实例类

    这样做可以通过代理模拟静态界面.

    使用包含受保护成员的包装器实例类来调用静态类

    这可能是最简单的模拟/管理而不重构,因为它可以继承和扩展.



3> Grundlefleck..:

我会使用方法对象模式.有一个静态实例,并在静态方法中调用它.根据您的模拟框架,应该可以子类化以进行测试.

即在你的类中使用静态方法有:

private static final MethodObject methodObject = new MethodObject();

public static void doSomething(){
    methodObject.doSomething();
}

并且您的方法对象可以是一个非常简单,易于测试的:

public class MethodObject {
    public void doSomething() {
        // do your thang
    }
}


这样做实际上杀死了有关静态方法的所有想法.

4> Carlton Jenk..:

你可能试图在一个起点太深的地方进行测试.不需要创建测试来单独测试每个方法; 私有和静态方法应该通过调用公共方法来测试,然后依次调用私有和静态方法.

所以说你的代码是这样的:

public object GetData()
{
 object obj1 = GetDataFromWherever();
 object obj2 = TransformData(obj1);
 return obj2;
} 
private static object TransformData(object obj)
{
//Do whatever
}

您不需要针对TransformData方法编写测试(并且您不能).而是编写测试TransformData中完成的工作的GetData方法的测试.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有