2

Art of unit test から読んだように、.NET はプロダクション ランタイムでテストするための seam メソッドを隠すことができることを知っています。(p.78~p.80)。そのような、

public class LogAnalyzer
{
...
internal LogAnalyzer (IExtensionManager extentionMgr)
{
manager = extentionMgr;
}
}

このように実行します。

using System.Runtime.CompilerServices;
[assembly:
InternalsVisibleTo("AOUT.CH3.Logan.Tests")]

そのため、LogAnalyzer() はテストクラスに対してのみ呼び出すことができ、テスト容易性のために実稼働コードに余分なコストを追加する心配はありません。簡単な調査の結果、Java には同等の機能がないようです。しかし、Javaには代替手段がありますか? ありがとう。

4

2 に答える 2

1

独自のカスタムを実装するのはどうClassLoaderですか? のように独自の注釈を定義し@HideFromProductionCode、カスタムが注釈ClassLoaderを持つクラスをロードした場合に例外をスローさせることができます@HideFromProductionCodeカスタム クラス ローダーをデフォルトに設定する方法を参照してください。

または、ビルド プロセスにスクリプトを追加するだけで、コンパイル済みのすべての運用コードを調べて@HideFromProductionCode注釈を探すことができます。

于 2012-07-24T17:25:18.680 に答える
0

かなり簡単なアプローチの 1 つは、Maven のようなディレクトリ構造を使用して、運用コードとテスト コード用に別のディレクトリを使用することです (通常はsrc/mainおよび と呼ばれるディレクトリの下src/test)。単体テストを実行すると、クラスパスにはメイン ディレクトリとテスト ディレクトリの両方が含まれます。ただし、本番環境にデプロイされる JAR をビルドすると、メイン ディレクトリで定義されたクラスのみが含まれます。このように、テスト クラスを参照する製品コードはコンパイル エラーになります。

于 2012-07-24T18:47:21.053 に答える