【问题标题】:What mock object libraries are there available for D?有哪些可用于 D 的模拟对象库?
【发布时间】:2011-01-25 23:42:22
【问题描述】:

我刚刚开始使用 D2 编程语言。我喜欢单元测试是语言本身的一部分这一事实,但我似乎找不到任何模拟对象库。有标准的吗?

【问题讨论】:

    标签: unit-testing mocking d


    【解决方案1】:

    我知道的唯一一个模拟对象库是DMocks,但它被废弃了。它可能无法使用最新的编译器版本进行编译。 或许std.typeconsBlackHoleWhiteHoleAutoImplement会在一定程度上帮助你。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        虽然它不像真正的模拟对象库那么花哨,但我目前通过以下方式进行依赖注入,效果很好:

        class Car( Engine = AtomicEngine, Wheel = CartWheel )
        {
            this()
            {
                engine = new Engine;
                ...
            }
        
            Engine engine;
            Wheel[4] wheels;
        }
        

        如果没有提供 MockEngine Car 默认使用首选的 AtomicEngine,这很简洁,因为这是我大部分时间想要的。另请注意,注入是在编译时完成的,不会对模拟功能造成运行时损失,即不需要继承。

        unittest
        {
            auto car = new Car!(MockBrokenEngine, MockWheel );
            car.start();
            assert(...);
        }
        

        让我们用这样一个坏掉的引擎来测试这辆车。

        【讨论】:

        • 这一切都很好,但是您如何创建模拟?这就是 OP 的要求。
        【解决方案4】:

        我是DUnit 的作者,其中包含一个模拟解决方案。它是这样使用的:

        class Foo
        {
            // Mixin mocking behaviour.
            mixin Mockable!(Foo);
        }
        
        auto foo = Foo.getMock();
        

        foo 现在是一个模拟。

        参考在这里: http://htmlpreview.github.io/?https://github.com/nomad-software/dunit/master/docs/dunit/mockable.html

        这里有一个更大的例子: https://github.com/nomad-software/dunit/blob/master/source/example.d

        【讨论】:

          猜你喜欢
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-22
          • 2016-05-31
          • 2012-07-13
          • 1970-01-01
          • 2014-02-04
          相关资源
          最近更新 更多