時々、テスト用に特定のコンストラクタを用意する必要がある場合があります。このようなコンストラクタを強制的にテストコードでのみ使用する方法はありません。 これがC++ 11/14で達成可能かどうか疑問に思います。例えば、特定のコードでのみ使用される特定のコンストラクタを他の場所に強制しない
class A {
public:
A() = default; // used only in test code
}
class A_Test : public ::testing::Test {
private:
A a; // it is ok.
};
class A_Production {
private:
A a; // compiler error
}
私はfriend
デコレータを使用してアクセスを制限するprotected
内の特定のコンストラクタを置くことを想像できます。レガシーコードには他の既存の友人もいます。 C++ 1xで保護されたカスタム指定子を作ることは可能ですか?
ラッパークラス(ES)何とか自分の要件に応じて、またはあなたがそのようプロジェクトの構造を再設計本当にその問題はありません。あなたがこの問題を抱えているかどうかは、あなたが悪い設計をしているからです。 – nbro
まあ、これはかなり合理的な要件だと思います。 – pepero
テストコードがプロダクションコードと異なるコードパスを実行している場合、_probably_はあまり良いテストコードではありません。 – ildjarn