【发布时间】:2011-01-25 23:42:22
【问题描述】:
我刚刚开始使用 D2 编程语言。我喜欢单元测试是语言本身的一部分这一事实,但我似乎找不到任何模拟对象库。有标准的吗?
【问题讨论】:
标签: unit-testing mocking d
我刚刚开始使用 D2 编程语言。我喜欢单元测试是语言本身的一部分这一事实,但我似乎找不到任何模拟对象库。有标准的吗?
【问题讨论】:
标签: unit-testing mocking d
我知道的唯一一个模拟对象库是DMocks,但它被废弃了。它可能无法使用最新的编译器版本进行编译。 或许std.typecons的BlackHole、WhiteHole和AutoImplement会在一定程度上帮助你。
【讨论】:
【讨论】:
虽然它不像真正的模拟对象库那么花哨,但我目前通过以下方式进行依赖注入,效果很好:
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(...);
}
让我们用这样一个坏掉的引擎来测试这辆车。
【讨论】:
我是DUnit 的作者,其中包含一个模拟解决方案。它是这样使用的:
class Foo
{
// Mixin mocking behaviour.
mixin Mockable!(Foo);
}
auto foo = Foo.getMock();
foo 现在是一个模拟。
这里有一个更大的例子: https://github.com/nomad-software/dunit/blob/master/source/example.d
【讨论】: