2

私はパフォーマンスが大好きですが、自動化されたテストを実行することの重要性も認識しています (より適切な正式な検証方法が主流になるまで)。

欠点は、テスト容易性を考慮して設計しようとすると、依存関係を表すインターフェイスを導入し始めることです。ご存知のように、インターフェイスは呼び出しをその依存関係に動的にディスパッチし、コンパイル時の最適化の機会を減らします。

class MyDependency
{
    void someMethod();
}

class MyUnit
{
    // Concrete type reference of MyDependency allows 
    // to bypass the dynamic dispatch
    this(MyDependency mayBeAMock)
    {
        mayBeAMock.someMethod();
    }

    unittest
    {
        // Now how can I get a mock of my dependency without to instantiate it.
        auto dep = someBlackMagic.getMock();
        auto uut = new MyUnit(dep);
    }
}

本番環境で動的ディスパッチのコストをかけずに、クラスを単体テストするためのより良い方法が存在します。必要に応じて、単体テストの実行にはそのコストを支払うことができますが、製品版のリリースには使用できません。

D および C++ ソリューションに興味があります。

4

2 に答える 2